Open sharonkodali opened 10 months ago
Research for login page
<h1>All</h1>
<table>
<tr>
<th>Number</th>
<th>Category Link</th>
</tr>
<tr>
<td>1</td>
<td><a href="__.html">___</a></td>
</tr>
<tr>
<td>2</td>
<td><a href="__.html">___</a></td>
</tr>
<tr>
<td>3</td>
<td><a href="__.html">___</a></td>
</tr>
</table>
</body>
</html>
plans for SASS styling
CSS classes
<style>
header {
background-color: #f2e9e1;
color: #fff;
padding: 10px 0;
}
nav ul {
list-style: none;
padding: 30px;
text-align: right;
}
nav ul li {
display: inline;
margin-right: 20px;
}
nav ul li a {
text-decoration: none;
color: #fff;
font-weight: bold;
}
.logo {
float: left;
margin-left: 20px;
padding: 20px;
}
</style>
Notes for Calendar: Calendar Structure should include:
Resources https://www.hoonzis.com/mock-java-calendar-jmockit-vs-mockito/
Step one Go to the Google Developers Console. Create a new project or select an existing one. Search for the Google Calendar API and enable it. Go to the “Credentials” tab and create credentials for a Desktop application.(This will download a credentials.json file.)
Step 2: Install Google Client Library Open your terminal or command prompt and install the Google Client Library by running: pip install –upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
Step 3:
Python code from research: from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from googleapiclient.discovery import build import datetime
def authenticate_google_calendar(): creds = None
# created automatically when the authorization flow completes for the first time.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open('token.json', 'w') as token:
token.write(creds.to_json())
return creds
def add_event_to_calendar(summary, location, description, start_time, end_time, timezone='America/Los_Angeles'): creds = authenticate_google_calendar() service = build('calendar', 'v3', credentials=creds)
event = {
'summary': summary,
'location': location,
'description': description,
'start': {
'dateTime': start_time,
'timeZone': timezone,
},
'end': {
'dateTime': end_time,
'timeZone': timezone,
},
}
event = service.events().insert(calendarId='primary', body=event).execute()
print(f"Event created: {event.get('htmlLink')}")
add_event_to_calendar( summary='Example Event', location='800 Howard St., San Francisco, CA 94103', description='A chance to hear more about Google\'s developer products.', start_time='2024-01-30T09:00:00', end_time
Research for database
CRUD Table Using html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>CRUD Data Table for Database</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto|Varela+Round">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
<style>
body {
color: #566787;
background: #f5f5f5;
font-family: 'Varela Round', sans-serif;
font-size: 13px;
}
.table-responsive {
margin: 30px 0;
}
.table-wrapper {
background: #fff;
padding: 20px 25px;
border-radius: 3px;
min-width: 1000px;
box-shadow: 0 1px 1px rgba(0,0,0,.05);
}
.table-title {
padding-bottom: 15px;
background: #435d7d;
color: #fff;
padding: 16px 30px;
min-width: 100%;
margin: -20px -25px 10px;
border-radius: 3px 3px 0 0;
}
.table-title h2 {
margin: 5px 0 0;
font-size: 24px;
}
.table-title .btn-group {
float: right;
}
.table-title .btn {
color: #fff;
float: right;
font-size: 13px;
border: none;
min-width: 50px;
border-radius: 2px;
border: none;
outline: none !important;
margin-left: 10px;
}
.table-title .btn i {
float: left;
font-size: 21px;
margin-right: 5px;
}
.table-title .btn span {
float: left;
margin-top: 2px;
}
table.table tr th, table.table tr td {
border-color: #e9e9e9;
padding: 12px 15px;
vertical-align: middle;
}
table.table tr th:first-child {
width: 60px;
}
table.table tr th:last-child {
width: 100px;
}
table.table-striped tbody tr:nth-of-type(odd) {
background-color: #fcfcfc;
}
table.table-striped.table-hover tbody tr:hover {
background: #f5f5f5;
}
table.table th i {
font-size: 13px;
margin: 0 5px;
cursor: pointer;
}
table.table td:last-child i {
opacity: 0.9;
font-size: 22px;
margin: 0 5px;
}
table.table td a {
font-weight: bold;
color: #566787;
display: inline-block;
text-decoration: none;
outline: none !important;
}
table.table td a:hover {
color: #2196F3;
}
table.table td a.edit {
color: #FFC107;
}
table.table td a.delete {
color: #F44336;
}
table.table td i {
font-size: 19px;
}
table.table .avatar {
border-radius: 50%;
vertical-align: middle;
margin-right: 10px;
}
.pagination {
float: right;
margin: 0 0 5px;
}
.pagination li a {
border: none;
font-size: 13px;
min-width: 30px;
min-height: 30px;
color: #999;
margin: 0 2px;
line-height: 30px;
border-radius: 2px !important;
text-align: center;
padding: 0 6px;
}
.pagination li a:hover {
color: #666;
}
.pagination li.active a, .pagination li.active a.page-link {
background: #03A9F4;
}
.pagination li.active a:hover {
background: #0397d6;
}
.pagination li.disabled i {
color: #ccc;
}
.pagination li i {
font-size: 16px;
padding-top: 6px
}
.hint-text {
float: left;
margin-top: 10px;
font-size: 13px;
}
/* Custom checkbox */
.custom-checkbox {
position: relative;
}
.custom-checkbox input[type="checkbox"] {
opacity: 0;
position: absolute;
margin: 5px 0 0 3px;
z-index: 9;
}
.custom-checkbox label:before{
width: 18px;
height: 18px;
}
.custom-checkbox label:before {
content: '';
margin-right: 10px;
display: inline-block;
vertical-align: text-top;
background: white;
border: 1px solid #bbb;
border-radius: 2px;
box-sizing: border-box;
z-index: 2;
}
.custom-checkbox input[type="checkbox"]:checked + label:after {
content: '';
position: absolute;
left: 6px;
top: 3px;
width: 6px;
height: 11px;
border: solid #000;
border-width: 0 3px 3px 0;
transform: inherit;
z-index: 3;
transform: rotateZ(45deg);
}
.custom-checkbox input[type="checkbox"]:checked + label:before {
border-color: #03A9F4;
background: #03A9F4;
}
.custom-checkbox input[type="checkbox"]:checked + label:after {
border-color: #fff;
}
.custom-checkbox input[type="checkbox"]:disabled + label:before {
color: #b8b8b8;
cursor: auto;
box-shadow: none;
background: #ddd;
}
/* Modal styles */
.modal .modal-dialog {
max-width: 400px;
}
.modal .modal-header, .modal .modal-body, .modal .modal-footer {
padding: 20px 30px;
}
.modal .modal-content {
border-radius: 3px;
font-size: 14px;
}
.modal .modal-footer {
background: #ecf0f1;
border-radius: 0 0 3px 3px;
}
.modal .modal-title {
display: inline-block;
}
.modal .form-control {
border-radius: 2px;
box-shadow: none;
border-color: #dddddd;
}
.modal textarea.form-control {
resize: vertical;
}
.modal .btn {
border-radius: 2px;
min-width: 100px;
}
.modal form label {
font-weight: normal;
}
</style>
<script>
$(document).ready(function(){
// Activate tooltip
$('[data-toggle="tooltip"]').tooltip();
// Select/Deselect checkboxes
var checkbox = $('table tbody input[type="checkbox"]');
$("#selectAll").click(function(){
if(this.checked){
checkbox.each(function(){
this.checked = true;
});
} else{
checkbox.each(function(){
this.checked = false;
});
}
});
checkbox.click(function(){
if(!this.checked){
$("#selectAll").prop("checked", false);
}
});
});
</script>
</head>
<body>
<div class="container-xl">
<div class="table-responsive">
<div class="table-wrapper">
<div class="table-title">
<div class="row">
<div class="col-sm-6">
<h2>Manage <b>Volunteers</b></h2>
</div>
<div class="col-sm-6">
<a href="#addVolunteerModal" class="btn btn-success" data-toggle="modal"><i class="material-icons"></i> <span>Add New Volunteer</span></a>
<a href="#deleteVolunteerModal" class="btn btn-danger" data-toggle="modal"><i class="material-icons"></i> <span>Delete</span></a>
</div>
</div>
</div>
<table class="table table-striped table-hover">
<thead>
<tr>
<th>
<span class="custom-checkbox">
<input type="checkbox" id="selectAll">
<label for="selectAll"></label>
</span>
</th>
<th>Name</th>
<th>Email</th>
<th>Password</th>
<th>Phone</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<span class="custom-checkbox">
<input type="checkbox" id="checkbox1" name="options[]" value="1">
<label for="checkbox1"></label>
</span>
</td>
<td>Example Name</td>
<td>@123gmail.com</td>
<td>89 Chiaroscuro Rd, Portland, USA</td>
<td>(171) 555-2222</td>
<td>
<a href="#editVolunteerModal" class="edit" data-toggle="modal"><i class="material-icons" data-toggle="tooltip" title="Edit"></i></a>
<a href="#deleteVolunteerModal" class="delete" data-toggle="modal"><i class="material-icons" data-toggle="tooltip" title="Delete"></i></a>
</td>
</tr>
<tr>
<td>
<span class="custom-checkbox">
<input type="checkbox" id="checkbox2" name="options[]" value="1">
<label for="checkbox2"></label>
</span>
</td>
<td>Example Name</td>
<td>123@gmail.com</td>
<td>Obere Str. 57, Berlin, Germany</td>
<td>(313) 555-5735</td>
<td>
<a href="#editVolunteerModal" class="edit" data-toggle="modal"><i class="material-icons" data-toggle="tooltip" title="Edit"></i></a>
<a href="#deleteVolunteerModal" class="delete" data-toggle="modal"><i class="material-icons" data-toggle="tooltip" title="Delete"></i></a>
</td>
</tr>
<tr>
<td>
<span class="custom-checkbox">
<input type="checkbox" id="checkbox3" name="options[]" value="1">
<label for="checkbox3"></label>
</span>
</td>
<td>Example Name</td>
<td>123@gmail.com</td>
<td>25, rue Lauriston, Paris, France</td>
<td>(503) 555-9931</td>
<td>
<a href="#editVolunteerModal" class="edit" data-toggle="modal"><i class="material-icons" data-toggle="tooltip" title="Edit"></i></a>
<a href="#deleteVolunteerModal" class="delete" data-toggle="modal"><i class="material-icons" data-toggle="tooltip" title="Delete"></i></a>
</td>
</tr>
<tr>
<td>
<span class="custom-checkbox">
<input type="checkbox" id="checkbox4" name="options[]" value="1">
<label for="checkbox4"></label>
</span>
</td>
<td>Example Name</td>
<td>123@gmail.com</td>
<td>C/ Araquil, 67, Madrid, Spain</td>
<td>(204) 619-5731</td>
<td>
<a href="#editVolunteerModal" class="edit" data-toggle="modal"><i class="material-icons" data-toggle="tooltip" title="Edit"></i></a>
<a href="#deleteVolunteerModal" class="delete" data-toggle="modal"><i class="material-icons" data-toggle="tooltip" title="Delete"></i></a>
</td>
</tr>
<tr>
<td>
<span class="custom-checkbox">
<input type="checkbox" id="checkbox5" name="options[]" value="1">
<label for="checkbox5"></label>
</span>
</td>
<td>Example Name</td>
<td>123@gmail.com</td>
<td>Via Monte Bianco 34, Turin, Italy</td>
<td>(480) 631-2097</td>
<td>
<a href="#editVolunteerModal" class="edit" data-toggle="modal"><i class="material-icons" data-toggle="tooltip" title="Edit"></i></a>
<a href="#deleteVolunteerModal" class="delete" data-toggle="modal"><i class="material-icons" data-toggle="tooltip" title="Delete"></i></a>
</td>
</tr>
</tbody>
</table>
<div class="clearfix">
<div class="hint-text">Showing <b>5</b> out of <b>25</b> entries</div>
<ul class="pagination">
<li class="page-item disabled"><a href="#">Previous</a></li>
<li class="page-item"><a href="#" class="page-link">1</a></li>
<li class="page-item"><a href="#" class="page-link">2</a></li>
<li class="page-item active"><a href="#" class="page-link">3</a></li>
<li class="page-item"><a href="#" class="page-link">4</a></li>
<li class="page-item"><a href="#" class="page-link">5</a></li>
<li class="page-item"><a href="#" class="page-link">Next</a></li>
</ul>
</div>
</div>
</div>
</div>
<!-- Edit Modal HTML -->
<div id="addVolunteerModal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<form>
<div class="modal-header">
<h4 class="modal-title">Add Volunteer</h4>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div class="modal-body">
<div class="form-group">
<label>Name</label>
<input type="text" class="form-control" required>
</div>
<div class="form-group">
<label>Email</label>
<input type="email" class="form-control" required>
</div>
<div class="form-group">
<label>Password</label>
<textarea class="form-control" required></textarea>
</div>
<div class="form-group">
<label>Phone</label>
<input type="text" class="form-control" required>
</div>
</div>
<div class="modal-footer">
<input type="button" class="btn btn-default" data-dismiss="modal" value="Cancel">
<input type="submit" class="btn btn-success" value="Add">
</div>
</form>
</div>
</div>
</div>
<!-- Edit Modal HTML -->
<div id="editVolunteerModal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<form>
<div class="modal-header">
<h4 class="modal-title">Edit Volunteer</h4>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div class="modal-body">
<div class="form-group">
<label>Name</label>
<input type="text" class="form-control" required>
</div>
<div class="form-group">
<label>Email</label>
<input type="email" class="form-control" required>
</div>
<div class="form-group">
<label>Password</label>
<textarea class="form-control" required></textarea>
</div>
<div class="form-group">
<label>Phone</label>
<input type="text" class="form-control" required>
</div>
</div>
<div class="modal-footer">
<input type="button" class="btn btn-default" data-dismiss="modal" value="Cancel">
<input type="submit" class="btn btn-info" value="Save">
</div>
</form>
</div>
</div>
</div>
<!-- Delete Modal HTML -->
<div id="deleteVolunteerModal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<form>
<div class="modal-header">
<h4 class="modal-title">Delete Volunteer</h4>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
</div>
<div class="modal-body">
<p>Are you sure you want to delete these Records?</p>
<p class="text-warning"><small>This action cannot be undone.</small></p>
</div>
<div class="modal-footer">
<input type="button" class="btn btn-default" data-dismiss="modal" value="Cancel">
<input type="submit" class="btn btn-danger" value="Delete">
</div>
</form>
</div>
</div>
</div>
</body>
</html>
# Example Code with all Rest API Methods
```Java
// User model class representing the user entity
public class User {
private Long id;
private String username;
private String email;
// other fields, getters, setters
}
// UserController class handling user-related API requests
@RestController //handles HTTP requests and produces JSON responses.
@RequestMapping("/users")
public class UserController {
// Service for handling user-related operations
@Autowired
private UserService userService;
// GET: Retrieve a list of users (read)
@GetMapping
public ResponseEntity<List<User>> getUsers() {
List<User> users = userService.getAllUsers();
return new ResponseEntity<>(users, HttpStatus.OK);
}
// GET: Fetch a single user by ID (read)
@GetMapping("/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
User user = userService.getUserById(id);
return new ResponseEntity<>(user, HttpStatus.OK);
}
// POST: Create a new user (Create)
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User newUser) {
User createdUser = userService.createUser(newUser);
return new ResponseEntity<>(createdUser, HttpStatus.CREATED);
}
// PUT: Update an existing user by ID (Update)
@PutMapping("/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User updatedUser) {
User user = userService.updateUser(id, updatedUser);
return new ResponseEntity<>(user, HttpStatus.OK);
}
// DELETE: Remove a user by ID (Delete)
@DeleteMapping("/{id}")
public ResponseEntity<String> deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
return new ResponseEntity<>("User deleted successfully", HttpStatus.OK);
}
}
// UserService interface defining user-related operations
public interface UserService { //declares all 5 methods of CRUD
List<User> getAllUsers();
User getUserById(Long id);
User createUser(User user);
User updateUser(Long id, User updatedUser);
void deleteUser(Long id);
}
Notes:
JPA (Java Persistence API): Specification for accessing, persisting, and managing data between Java objects and a relational database.
JSONB (Binary) stores JSON (JavaScript Object Notation) documents in efficient binary form. Faster processing and consumes slightly more disc space
Set up Flask server and create a database to connect to the backend repo
Research for creating domain in database:
https://sharonkodali.github.io/CPTproject//2024/01/22/DatabaseResearch_IPYNB_2_.html
Types of Databases for Volunteer Work
Volunteer Match: VolunteerMatch is a platform that connects volunteers with organizations that need help. You can search for opportunities based on your location and interests.
Idealist: Idealist is a global platform that lists volunteer opportunities, internships, and jobs in the nonprofit sector. You can search for opportunities based on your skills and location.
All for Good: All for Good is a volunteer opportunity aggregator that pulls in opportunities from various sources. You can search for opportunities based on your location and interests.
Points of Light: Points of Light is an organization that focuses on volunteer service. Their website includes a database of volunteer opportunities that you can search based on your location.
HandsOn Network: HandsOn Network is a network of volunteer centers across the globe. They connect people with volunteer opportunities in their local communities.
Volunteering Solutions: This platform provides volunteer opportunities and internships abroad. If you're interested in international volunteering, this could be a good option.
DoSomething.org: DoSomething.org focuses on getting young people involved in social change. They list various campaigns and volunteer opportunities that you can participate in.
These are all famous websites and organzations that have massive connections from not only around the United States, but also globally. However, to increase the success of users utilizing the databases, we must be able to limit the oppurtunities to a certain region or city (ie. a student in San Diego will have access to oppurtunities from all over the world but is only interested in the volunteer organizations in San Diego)
Creating Domains in Databases
Geocoding: Geocoding converts addresses into geographic coordinates (longitude and latitude)
OpenCage: OpenCage offers a geocoding API that supports forward and reverse geocoding. It provides global coverage and includes additional information such as timezone and currency.
Mapbox Geocoding API: Mapbox provides a geocoding API that can be used for converting locations into coordinates and vice versa. It's part of the broader Mapbox platform for mapping and location-based services.
HERE Geocoding API: HERE Technologies offers a geocoding API that supports both forward and reverse geocoding. It provides detailed location information and is used for various mapping and location-based applications.
Bing Maps API: Microsoft's Bing Maps API includes a geocoding service that allows developers to perform geocoding and reverse geocoding tasks. It integrates with Bing Maps for mapping purposes.
All of these APIs cost a certain amount of money.
import sqlite3
conn = sqlite3.connect('your_database.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM your_table')
results = cursor.fetchall()
conn.close()
AI CHATBOT IDEATION
https://sharonkodali.github.io/sharonk//2024/01/18/AIbot_IPYNB_2_.html
The contributions and research for each feature in the project