feat: validate user availability
This commit is contained in:
@@ -5,6 +5,7 @@ import (
|
||||
"net/http"
|
||||
"strconv"
|
||||
"time"
|
||||
"fmt"
|
||||
|
||||
"github.com/patel-mann/poll-system/app/internal/models"
|
||||
"github.com/patel-mann/poll-system/app/internal/utils"
|
||||
@@ -82,22 +83,22 @@ func AddressHandler(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
// Query addresses with appointment + user info
|
||||
rows, err := models.DB.Query(`
|
||||
SELECT
|
||||
SELECT
|
||||
a.address_id,
|
||||
a.address,
|
||||
a.street_name,
|
||||
a.address,
|
||||
a.street_name,
|
||||
a.street_type,
|
||||
a.street_quadrant,
|
||||
a.street_quadrant,
|
||||
a.house_number,
|
||||
COALESCE(a.house_alpha, '') as house_alpha,
|
||||
a.longitude,
|
||||
a.longitude,
|
||||
a.latitude,
|
||||
a.visited_validated,
|
||||
a.created_at,
|
||||
a.updated_at,
|
||||
CASE
|
||||
WHEN ap.sched_id IS NOT NULL THEN true
|
||||
ELSE false
|
||||
CASE
|
||||
WHEN ap.sched_id IS NOT NULL THEN true
|
||||
ELSE false
|
||||
END as assigned,
|
||||
ap.user_id,
|
||||
COALESCE(u.first_name || ' ' || u.last_name, '') as user_name,
|
||||
@@ -146,12 +147,12 @@ func AddressHandler(w http.ResponseWriter, r *http.Request) {
|
||||
log.Println("Scan error:", err)
|
||||
continue
|
||||
}
|
||||
|
||||
|
||||
// Handle nullable house_alpha
|
||||
if houseAlpha != "" {
|
||||
a.HouseAlpha = &houseAlpha
|
||||
}
|
||||
|
||||
|
||||
addresses = append(addresses, a)
|
||||
}
|
||||
|
||||
@@ -303,10 +304,13 @@ func AssignAddressHandler(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
// Parse and validate the start time
|
||||
_, err = time.Parse("15:04", startTime)
|
||||
if err != nil {
|
||||
http.Error(w, "Invalid start time format", http.StatusBadRequest)
|
||||
parsedTime, err := time.Parse("15:04", startTime)
|
||||
is_valid := ValidatedFreeTime(parsedDate, parsedTime, userID)
|
||||
if is_valid != true {
|
||||
http.Error(w, "User is not availabile", http.StatusBadRequest)
|
||||
return
|
||||
}else{
|
||||
fmt.Print("hello")
|
||||
}
|
||||
|
||||
// Verify the user exists and is associated with the current admin
|
||||
@@ -330,7 +334,7 @@ func AssignAddressHandler(w http.ResponseWriter, r *http.Request) {
|
||||
// Check if this address is already assigned to any user
|
||||
var exists int
|
||||
err = models.DB.QueryRow(`
|
||||
SELECT COUNT(*) FROM appointment
|
||||
SELECT COUNT(*) FROM appointment
|
||||
WHERE address_id = $1
|
||||
`, addressID).Scan(&exists)
|
||||
if err != nil {
|
||||
@@ -346,7 +350,7 @@ func AssignAddressHandler(w http.ResponseWriter, r *http.Request) {
|
||||
// Check if the user already has an appointment at the same date and time
|
||||
var timeConflict int
|
||||
err = models.DB.QueryRow(`
|
||||
SELECT COUNT(*) FROM appointment
|
||||
SELECT COUNT(*) FROM appointment
|
||||
WHERE user_id = $1 AND appointment_date = $2 AND appointment_time = $3
|
||||
`, userID, appointmentDate, startTime).Scan(&timeConflict)
|
||||
if err != nil {
|
||||
@@ -410,7 +414,7 @@ func RemoveAssignedAddressHandler(w http.ResponseWriter, r *http.Request) {
|
||||
currentAdminID := r.Context().Value("user_id").(int)
|
||||
var userExists int
|
||||
err = models.DB.QueryRow(`
|
||||
SELECT COUNT(*)
|
||||
SELECT COUNT(*)
|
||||
FROM admin_volunteers av
|
||||
JOIN appointment ap ON av.volunteer_id = ap.user_id
|
||||
WHERE av.admin_id = $1 AND ap.user_id = $2 AND ap.address_id = $3
|
||||
|
||||
Reference in New Issue
Block a user