From 9e6c97e532ef9970fc975123abaca86c4ce9b6b1 Mon Sep 17 00:00:00 2001 From: Michael Hunteman Date: Sat, 31 Aug 2024 16:09:58 -0700 Subject: Update type names --- client/src/components/AdminLogin.tsx | 6 +++--- client/src/components/GuestLogin.tsx | 6 +++--- client/src/components/RsvpForm.tsx | 20 ++++++++++---------- client/src/models.ts | 10 +++++----- client/src/slices/api/adminSlice.ts | 4 ++-- client/src/slices/api/guestSlice.ts | 12 ++++-------- server/admin/handler.go | 4 ++-- server/admin/models.go | 2 +- server/guest/handler.go | 26 +++++++++++++------------- server/guest/models.go | 27 +++++++++++---------------- server/guest/store.go | 14 +++++++------- server/test/guest_test.go | 8 ++++---- 12 files changed, 65 insertions(+), 74 deletions(-) diff --git a/client/src/components/AdminLogin.tsx b/client/src/components/AdminLogin.tsx index 92e5335..4f53566 100644 --- a/client/src/components/AdminLogin.tsx +++ b/client/src/components/AdminLogin.tsx @@ -5,7 +5,7 @@ import { Button, Paper, TextField, Typography } from '@mui/material'; import { useForm } from 'react-hook-form'; import { setAdmin } from '../slices/auth/adminSlice'; import { useLoginAdminMutation } from '../slices/api/adminSlice'; -import type { AdminLoginRequest } from '../models'; +import type { Credentials } from '../models'; function GuestLogin() { const dispatch = useDispatch(); @@ -16,14 +16,14 @@ function GuestLogin() { register, handleSubmit, formState: { errors }, - } = useForm({ + } = useForm({ defaultValues: { username: '', password: '', }, }); - const onSubmit = async (data: AdminLoginRequest) => { + const onSubmit = async (data: Credentials) => { try { dispatch(setAdmin(await login(data).unwrap())); navigate('/dashboard'); diff --git a/client/src/components/GuestLogin.tsx b/client/src/components/GuestLogin.tsx index 0e47384..f42c1d6 100644 --- a/client/src/components/GuestLogin.tsx +++ b/client/src/components/GuestLogin.tsx @@ -5,7 +5,7 @@ import { Button, Paper, TextField, Typography } from '@mui/material'; import { useForm } from 'react-hook-form'; import { setGuest } from '../slices/auth/guestSlice'; import { useLoginGuestMutation } from '../slices/api/guestSlice'; -import type { GuestLoginRequest } from '../slices/api/guestSlice'; +import type { Name } from '../models'; function GuestLogin() { const dispatch = useDispatch(); @@ -16,14 +16,14 @@ function GuestLogin() { register, handleSubmit, formState: { errors }, - } = useForm({ + } = useForm({ defaultValues: { firstName: '', lastName: '', }, }); - const onSubmit = async (data: GuestLoginRequest) => { + const onSubmit = async (data: Name) => { try { dispatch(setGuest(await login(data).unwrap())); navigate('/rsvp'); diff --git a/client/src/components/RsvpForm.tsx b/client/src/components/RsvpForm.tsx index c7c30f4..b3ed3b3 100644 --- a/client/src/components/RsvpForm.tsx +++ b/client/src/components/RsvpForm.tsx @@ -37,10 +37,10 @@ const Status = ({ isError, setOpen }: StatusProps) => { }; function RsvpForm() { - const [updateGuest, { isLoading, isSuccess, isError, error }] = + const [updateGuest, { isLoading, isSuccess, isError }] = useUpdateGuestMutation(); const guest: Guest = useOutletContext(); - const previousPartySize = useRef(guest?.partySize - 1); + const previousPartySize = useRef(guest.partySize ?? 1 - 1); const [open, setOpen] = useState(false); useEffect(() => { @@ -55,14 +55,14 @@ function RsvpForm() { formState: { errors }, } = useForm({ defaultValues: { - id: guest?.id, - firstName: guest?.firstName, - lastName: guest?.lastName, - attendance: guest?.attendance, - email: guest?.email, - message: guest?.message, - partySize: guest?.partySize, - partyList: guest?.partyList, + id: guest.id, + firstName: guest.firstName, + lastName: guest.lastName, + attendance: guest.attendance, + email: guest.email, + message: guest.message, + partySize: guest.partySize, + partyList: guest.partyList, }, }); diff --git a/client/src/models.ts b/client/src/models.ts index 2580d90..6840a46 100644 --- a/client/src/models.ts +++ b/client/src/models.ts @@ -6,25 +6,25 @@ export interface Guest { email?: string; message?: string; partySize?: number; - partyList?: Array; + partyList?: Array; } -export interface GuestLoginRequest { +export interface Name { firstName: string; lastName: string; } -export interface GuestLoginResponse { +export interface GuestLogin { guest: Guest; token: string; } -export interface AdminLoginRequest { +export interface Credentials { username: string; password: string; } -export interface AdminLoginResponse { +export interface AdminLogin { guests: Guest[]; token: string; } diff --git a/client/src/slices/api/adminSlice.ts b/client/src/slices/api/adminSlice.ts index bd69502..5de5c4d 100644 --- a/client/src/slices/api/adminSlice.ts +++ b/client/src/slices/api/adminSlice.ts @@ -1,6 +1,6 @@ import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'; import type { RootState } from '../../store'; -import type { AdminLoginRequest, AdminLoginResponse } from '../../models'; +import type { Credentials, AdminLogin } from '../../models'; export const adminSlice = createApi({ reducerPath: 'adminApi', @@ -15,7 +15,7 @@ export const adminSlice = createApi({ }, }), endpoints: (builder) => ({ - loginAdmin: builder.mutation({ + loginAdmin: builder.mutation({ query: (credentials) => ({ url: 'admin/login', method: 'POST', diff --git a/client/src/slices/api/guestSlice.ts b/client/src/slices/api/guestSlice.ts index a7dbcc4..312a665 100644 --- a/client/src/slices/api/guestSlice.ts +++ b/client/src/slices/api/guestSlice.ts @@ -1,10 +1,6 @@ import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query/react'; import type { RootState } from '../../store'; -import type { - Guest, - GuestLoginRequest, - GuestLoginResponse, -} from '../../models'; +import type { Guest, Name, GuestLogin } from '../../models'; export const guestSlice = createApi({ reducerPath: 'guestApi', @@ -19,11 +15,11 @@ export const guestSlice = createApi({ }, }), endpoints: (builder) => ({ - loginGuest: builder.mutation({ - query: (credentials) => ({ + loginGuest: builder.mutation({ + query: (name) => ({ url: 'login', method: 'POST', - body: credentials, + body: name, }), }), updateGuest: builder.mutation({ diff --git a/server/admin/handler.go b/server/admin/handler.go index 5fd1fee..f2d5807 100644 --- a/server/admin/handler.go +++ b/server/admin/handler.go @@ -114,6 +114,6 @@ func (adminHandler *AdminHandler) marshalResponse(guests []guest.Guest, token st return json.Marshal(loginResponse) } -func (adminHandler *AdminHandler) createLoginResponse(guests []guest.Guest, token string) *LoginResponse { - return &LoginResponse{guests, token} +func (adminHandler *AdminHandler) createLoginResponse(guests []guest.Guest, token string) *Login { + return &Login{guests, token} } diff --git a/server/admin/models.go b/server/admin/models.go index d9b8232..1699381 100644 --- a/server/admin/models.go +++ b/server/admin/models.go @@ -15,7 +15,7 @@ type Claims struct { jwt.RegisteredClaims } -type LoginResponse struct { +type Login struct { Guests []guest.Guest `json:"guests"` Token string `json:"token"` } diff --git a/server/guest/handler.go b/server/guest/handler.go index a14a039..e4ba3f3 100644 --- a/server/guest/handler.go +++ b/server/guest/handler.go @@ -22,7 +22,7 @@ type GuestHandler struct { } type GuestStore interface { - Find(credentials Credentials) (Guest, error) + Find(name Name) (Guest, error) Get() ([]Guest, error) Add(guest Guest) error Update(guest Guest) error @@ -103,16 +103,16 @@ func (handler *GuestHandler) handleDelete(responseWriter http.ResponseWriter, re } func (handler *GuestHandler) logIn(request *http.Request) ([]byte, *appError) { - credentials, err := handler.decodeCredentials(request) + name, err := handler.decodeName(request) if err != nil { - return []byte{}, &appError{err, "failed to unmarshal credentials", http.StatusBadRequest} + return []byte{}, &appError{err, "failed to unmarshal name", http.StatusBadRequest} } - guest, err := handler.store.Find(credentials) + guest, err := handler.store.Find(name) if err != nil { return []byte{}, &appError{err, "guest not found", http.StatusUnauthorized} } expirationTime := handler.setExpirationTime() - claims := handler.createClaims(credentials, expirationTime) + claims := handler.createClaims(name, expirationTime) key, err := handler.readGuestKey() if err != nil { return []byte{}, &appError{err, "failed to read secret key", http.StatusInternalServerError} @@ -128,20 +128,20 @@ func (handler *GuestHandler) logIn(request *http.Request) ([]byte, *appError) { return jsonBytes, nil } -func (handler *GuestHandler) decodeCredentials(request *http.Request) (Credentials, error) { - var credentials Credentials - err := json.NewDecoder(request.Body).Decode(&credentials) +func (handler *GuestHandler) decodeName(request *http.Request) (Name, error) { + var name Name + err := json.NewDecoder(request.Body).Decode(&name) defer request.Body.Close() - return credentials, err + return name, err } func (handler *GuestHandler) setExpirationTime() time.Time { return time.Now().Add(15 * time.Minute) } -func (handler *GuestHandler) createClaims(credentials Credentials, expirationTime time.Time) *Claims { +func (handler *GuestHandler) createClaims(name Name, expirationTime time.Time) *Claims { return &Claims{ - Credentials: credentials, + Name: name, RegisteredClaims: jwt.RegisteredClaims{ ExpiresAt: jwt.NewNumericDate(expirationTime), }, @@ -167,8 +167,8 @@ func (handler *GuestHandler) marshalResponse(guest Guest, token string) ([]byte, return json.Marshal(loginResponse) } -func (handler *GuestHandler) createLoginResponse(weddingGuest Guest, token string) *LoginResponse { - return &LoginResponse{ +func (handler *GuestHandler) createLoginResponse(weddingGuest Guest, token string) *Login { + return &Login{ Guest: weddingGuest, Token: token, } diff --git a/server/guest/models.go b/server/guest/models.go index f792789..d93bd53 100644 --- a/server/guest/models.go +++ b/server/guest/models.go @@ -3,32 +3,27 @@ package guest import "github.com/golang-jwt/jwt/v5" type Guest struct { - ID int `json:"id"` - FirstName string `json:"firstName"` - LastName string `json:"lastName"` - Attendance string `json:"attendance"` - Email string `json:"email"` - Message string `json:"message"` - PartySize int `json:"partySize"` - PartyList []PartyMember `json:"partyList"` + ID int `json:"id"` + FirstName string `json:"firstName"` + LastName string `json:"lastName"` + Attendance string `json:"attendance"` + Email string `json:"email"` + Message string `json:"message"` + PartySize int `json:"partySize"` + PartyList []Name `json:"partyList"` } -type PartyMember struct { - FirstName string `json:"firstName"` - LastName string `json:"lastName"` -} - -type Credentials struct { +type Name struct { FirstName string `json:"firstName"` LastName string `json:"lastName"` } type Claims struct { - Credentials Credentials `json:"credentials"` + Name Name `json:"name"` jwt.RegisteredClaims } -type LoginResponse struct { +type Login struct { Guest Guest `json:"guest"` Token string `json:"token"` } diff --git a/server/guest/store.go b/server/guest/store.go index 44fa6d7..16123e3 100644 --- a/server/guest/store.go +++ b/server/guest/store.go @@ -18,14 +18,14 @@ func NewStore(database *pgxpool.Pool) *Store { } } -func (store Store) Find(credentials Credentials) (Guest, error) { +func (store Store) Find(name Name) (Guest, error) { guestRows, err := store.database.Query(context.Background(), "select * from guest") if err != nil { return Guest{}, err } defer guestRows.Close() - guest, found := createGuest(credentials, guestRows) + guest, found := createGuest(name, guestRows) partyRows, err := store.database.Query(context.Background(), "select * from party") @@ -45,7 +45,7 @@ func (store Store) Find(credentials Credentials) (Guest, error) { return Guest{}, errors.New("guest not found") } -func createGuest(credentials Credentials, guestRows pgx.Rows) (Guest, bool) { +func createGuest(name Name, guestRows pgx.Rows) (Guest, bool) { var guest Guest for guestRows.Next() { err := guestRows.Scan(&guest.ID, &guest.FirstName, &guest.LastName, @@ -53,8 +53,8 @@ func createGuest(credentials Credentials, guestRows pgx.Rows) (Guest, bool) { if err != nil { return Guest{}, false } - if guest.FirstName == credentials.FirstName && - guest.LastName == credentials.LastName { + if guest.FirstName == name.FirstName && + guest.LastName == name.LastName { return guest, true } } @@ -65,7 +65,7 @@ func addParty(guestWithoutParty Guest, partyRows pgx.Rows) (Guest, error) { guestWithParty := guestWithoutParty for partyRows.Next() { var guestID int - var partyMember PartyMember + var partyMember Name err := partyRows.Scan(&guestID, &partyMember.FirstName, &partyMember.LastName) if err != nil { return Guest{}, err @@ -123,7 +123,7 @@ func addPartySlice(guestsWithoutParty []Guest, guestsWithParty := guestsWithoutParty for partyRows.Next() { var guestID int - var partyMember PartyMember + var partyMember Name err := partyRows.Scan(&guestID, &partyMember.FirstName, &partyMember.LastName) if err != nil { return []Guest{}, err diff --git a/server/test/guest_test.go b/server/test/guest_test.go index 4609d57..a5e8e8d 100644 --- a/server/test/guest_test.go +++ b/server/test/guest_test.go @@ -63,7 +63,7 @@ func TestUpdateRSVP(test *testing.T) { deleteGuest(guestHandler, adminToken, test) } -func logInGuest(guestHandler *guest.GuestHandler, test *testing.T) guest.LoginResponse { +func logInGuest(guestHandler *guest.GuestHandler, test *testing.T) guest.Login { response := httptest.NewRecorder() loginRequest, err := http.NewRequest(http.MethodPost, "http://localhost:8080/guests/login", strings.NewReader(getName())) @@ -72,7 +72,7 @@ func logInGuest(guestHandler *guest.GuestHandler, test *testing.T) guest.LoginRe } guestHandler.ServeHTTP(response, loginRequest) assertEquals(test, response.Result().StatusCode, 200) - var login guest.LoginResponse + var login guest.Login if err = json.NewDecoder(response.Body).Decode(&login); err != nil { log.Fatal(err) } @@ -91,7 +91,7 @@ func addPartyMember(guestHandler *guest.GuestHandler, token string, test *testin assertEquals(test, response.Result().StatusCode, 200) } -func logInAdmin(adminHandler *admin.AdminHandler, test *testing.T) admin.LoginResponse { +func logInAdmin(adminHandler *admin.AdminHandler, test *testing.T) admin.Login { response := httptest.NewRecorder() loginRequest, err := http.NewRequest(http.MethodPost, "http://localhost:8080/admin/login", strings.NewReader(getCredentials())) @@ -100,7 +100,7 @@ func logInAdmin(adminHandler *admin.AdminHandler, test *testing.T) admin.LoginRe } adminHandler.ServeHTTP(response, loginRequest) assertEquals(test, response.Result().StatusCode, 200) - var login admin.LoginResponse + var login admin.Login if err = json.NewDecoder(response.Body).Decode(&login); err != nil { log.Fatal(err) } -- cgit v1.2.3