Reviewed-on: tim/me-fit#46
This commit is contained in:
@@ -41,5 +41,6 @@ func getRouter(db *sql.DB) *http.ServeMux {
|
||||
var router = http.NewServeMux()
|
||||
router.HandleFunc("POST /workout", workout.NewWorkout(db))
|
||||
router.HandleFunc("GET /workout", workout.GetWorkouts(db))
|
||||
router.HandleFunc("DELETE /workout", workout.DeleteWorkout(db))
|
||||
return router
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ func GetWorkouts(db *sql.DB) http.HandlerFunc {
|
||||
token := r.Context().Value(middleware.TOKEN_KEY).(*auth.Token)
|
||||
var userId = token.UID
|
||||
|
||||
rows, err := db.Query("SELECT date, type, sets, reps FROM workout WHERE user_id = ?", userId)
|
||||
rows, err := db.Query("SELECT rowid, date, type, sets, reps FROM workout WHERE user_id = ?", userId)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
@@ -66,18 +66,20 @@ func GetWorkouts(db *sql.DB) http.HandlerFunc {
|
||||
|
||||
var workouts = make([]map[string]interface{}, 0)
|
||||
for rows.Next() {
|
||||
var id int
|
||||
var date string
|
||||
var workoutType string
|
||||
var sets int
|
||||
var reps int
|
||||
|
||||
err = rows.Scan(&date, &workoutType, &sets, &reps)
|
||||
err = rows.Scan(&id, &date, &workoutType, &sets, &reps)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
workout := map[string]interface{}{
|
||||
"id": id,
|
||||
"date": date,
|
||||
"type": workoutType,
|
||||
"sets": sets,
|
||||
@@ -89,3 +91,22 @@ func GetWorkouts(db *sql.DB) http.HandlerFunc {
|
||||
utils.WriteJSON(w, workouts)
|
||||
}
|
||||
}
|
||||
|
||||
func DeleteWorkout(db *sql.DB) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
token := r.Context().Value(middleware.TOKEN_KEY).(*auth.Token)
|
||||
var userId = token.UID
|
||||
|
||||
rowId := r.FormValue("id")
|
||||
if rowId == "" {
|
||||
http.Error(w, "Missing required fields", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
_, err := db.Exec("DELETE FROM workout WHERE user_id = ? AND rowid = ?", userId, rowId)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
<a href="/" class="flex-1">ME-FIT</a>
|
||||
{#if user}
|
||||
<p>{user?.email}</p>
|
||||
<button class="btn" on:click={async () => signOut()}>Logout</button>
|
||||
<button class="btn" on:click={async () => signOut()}>Sign Out</button>
|
||||
{:else}
|
||||
<a href="/signup" class="btn">Sign Up</a>
|
||||
<a href="/signin" class="btn">Sign In</a>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
import type { Auth } from 'firebase/auth';
|
||||
import { goto } from '$app/navigation';
|
||||
import { addToast } from '$lib/toast';
|
||||
import MdiDelete from '~icons/mdi/delete';
|
||||
|
||||
var auth: Auth | null = null;
|
||||
|
||||
@@ -53,9 +54,7 @@
|
||||
});
|
||||
|
||||
if (response.ok) {
|
||||
const data = await response.json();
|
||||
console.log(data);
|
||||
workouts = data;
|
||||
workouts = await response.json();
|
||||
} else {
|
||||
addToast('Failed to fetch workouts: ' + (await response.text()), 'error');
|
||||
}
|
||||
@@ -64,6 +63,29 @@
|
||||
}
|
||||
}
|
||||
|
||||
async function deleteWorkout(id: string) {
|
||||
console.log('Deleting workout with id: ', id);
|
||||
try {
|
||||
const data = new FormData();
|
||||
data.append('id', id);
|
||||
const response = await fetch(PUBLIC_BASE_API_URL + '/workout', {
|
||||
headers: {
|
||||
Authorization: 'Bearer ' + (await auth?.currentUser?.getIdToken())
|
||||
},
|
||||
body: data,
|
||||
method: 'DELETE'
|
||||
});
|
||||
|
||||
if (response.ok) {
|
||||
workouts = workouts.filter((workout) => workout.id !== id);
|
||||
} else {
|
||||
addToast('Failed to delete workout: ' + (await response.text()), 'error');
|
||||
}
|
||||
} catch (error: any) {
|
||||
addToast('Failed to delete workout: ' + error.message, 'error');
|
||||
}
|
||||
}
|
||||
|
||||
onMount(async () => {
|
||||
const authImp = import('$lib/firebase');
|
||||
|
||||
@@ -107,6 +129,7 @@
|
||||
<th>Type</th>
|
||||
<th>Sets</th>
|
||||
<th>Reps</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
@@ -117,6 +140,13 @@
|
||||
<th>{workout.type}</th>
|
||||
<th>{workout.sets}</th>
|
||||
<th>{workout.reps}</th>
|
||||
<th>
|
||||
<div class="tooltip" data-tip="Delete Entry">
|
||||
<button on:click={deleteWorkout(workout.id)}>
|
||||
<MdiDelete class="text-gray-400 text-lg"></MdiDelete>
|
||||
</button>
|
||||
</div>
|
||||
</th>
|
||||
</tr>
|
||||
{/each}
|
||||
</tbody>
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
data.get('password') as string
|
||||
);
|
||||
|
||||
addToast('Signed in successfully', 'success');
|
||||
goto('/');
|
||||
} catch (error: any) {
|
||||
const errorStr = error.code ? error.code : error.message;
|
||||
|
||||
Reference in New Issue
Block a user