From c8784320cf2e0c70f2842d1f77eef565cfb99cd1 Mon Sep 17 00:00:00 2001 From: fabio Date: Fri, 8 May 2026 21:45:08 +0200 Subject: [PATCH] feat: add user management dialogs for blocking, editing, and password changes - Created UserBlockDialog.vue for blocking/unblocking users with status notifications. - Implemented UserEditorDialog.vue for creating and editing user details, including account, details, and preferences tabs. - Added UserPasswordDialog.vue for changing user passwords with validation. - Defined types for user forms and dialogs in types.ts. - Introduced user-store.ts for managing user state with Pinia, including fetching user data and handling errors. --- backend/data/data.db | Bin 81920 -> 544768 bytes backend/internal/admin/controller.go | 62 ++ backend/internal/admin/routes.go | 24 +- backend/internal/auth/roles.go | 90 +- backend/internal/auth/routes.go | 3 +- backend/internal/middleware/auth.go | 2 +- backend/internal/seed/seed.go | 5 +- backend/internal/tokens/services.go | 26 +- backend/internal/user/controller.go | 279 +----- backend/internal/user/model.go | 141 +-- backend/internal/user/repository.go | 338 +++++++ backend/internal/user/repository.md | 8 + backend/internal/user/rerpository.go | 35 - backend/internal/user/routes.go | 11 +- frontend/.env | 1 + frontend/quasar.config.ts | 2 +- frontend/src/App.vue | 17 +- frontend/src/api/admin.ts | 54 +- frontend/src/api/api.ts | 2 +- frontend/src/api/auth.ts | 36 +- frontend/src/api/systemUtils.ts | 26 +- frontend/src/api/users.ts | 367 ++++---- frontend/src/layouts/AdminLayout.vue | 21 +- frontend/src/pages/admin/UsersPage.vue | 878 ++---------------- .../pages/admin/dialogs/UserAvatarDialog.vue | 444 +++++++++ .../pages/admin/dialogs/UserBlockDialog.vue | 161 ++++ .../pages/admin/dialogs/UserEditorDialog.vue | 636 +++++++++++++ .../admin/dialogs/UserPasswordDialog.vue | 152 +++ frontend/src/pages/admin/dialogs/types.ts | 114 +++ frontend/src/pages/dev/SignupPage.vue | 10 +- frontend/src/stores/user-store.ts | 44 + 31 files changed, 2551 insertions(+), 1438 deletions(-) create mode 100644 backend/internal/user/repository.go create mode 100644 backend/internal/user/repository.md delete mode 100644 backend/internal/user/rerpository.go create mode 100644 frontend/src/pages/admin/dialogs/UserAvatarDialog.vue create mode 100644 frontend/src/pages/admin/dialogs/UserBlockDialog.vue create mode 100644 frontend/src/pages/admin/dialogs/UserEditorDialog.vue create mode 100644 frontend/src/pages/admin/dialogs/UserPasswordDialog.vue create mode 100644 frontend/src/pages/admin/dialogs/types.ts create mode 100644 frontend/src/stores/user-store.ts diff --git a/backend/data/data.db b/backend/data/data.db index b5b654425065d13c6a593fc15c449736cbc40bdf..1eb939ccbc6d1c286ef2515c24660e050eded881 100644 GIT binary patch literal 544768 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

JiArQu#Ufm&4$P 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 0 { - user.Types = req.Types - } - - if err := db.Transaction(func(tx *gorm.DB) error { - if err := tx.Save(user).Error; err != nil { - return err - } - if err := syncUserDetails(tx, user.ID, req.Details); err != nil { - return err - } - if err := syncUserPreferences(tx, user.ID, req.Preferences); err != nil { - return err - } - return nil - }); err != nil { - return fiber.NewError(fiber.StatusInternalServerError, "failed to update user") - } - - if err := db.Preload("Details").Preload("Preferences").First(user, user.ID).Error; err != nil { - return fiber.NewError(fiber.StatusInternalServerError, "failed to reload user") - } - - return c.JSON(responses.Success(ToUserProfile(user))) + return c.JSON(responses.Success(user)) } // DeleteUser removes a user and linked details/preferences through cascading delete rules. func (uc *UserController) DeleteUser(c fiber.Ctx) error { - db, err := db.DBFromCtx(c) - if err != nil { + if err := DeleteUser(c.Params("uuid")); err != nil { return err } - user, err := loadUserByID(c) - if err != nil { - return err - } - - if err := db.Transaction(func(tx *gorm.DB) error { - if err := tx.Where("user_id = ?", user.ID).Delete(&UserDetails{}).Error; err != nil { - return err - } - if err := tx.Where("user_id = ?", user.ID).Delete(&UserPreferences{}).Error; err != nil { - return err - } - return tx.Delete(user).Error - }); err != nil { - return fiber.NewError(fiber.StatusInternalServerError, "failed to delete user") - } - return c.JSON(responses.Success(responses.SimpleResponse{Message: "user deleted"})) } @@ -232,7 +143,7 @@ func (uc *UserController) Login(c fiber.Ctx) error { return fiber.NewError(fiber.StatusInternalServerError, "invalid user role") } - token, err := uc.TockenService.GenerateTokenPair(user.Email, auth.PermissionToString(permission)) + token, err := uc.TockenService.GenerateTokenPair(user.ID, permission) if err != nil { return fiber.NewError(fiber.StatusInternalServerError, "failed to issue token") } @@ -300,14 +211,14 @@ func (uc *UserController) Register(c fiber.Ctx) error { } return req.Status }(), - Types: func() UserTypes { - if len(req.Types) == 0 { - return UserTypes{"internal"} + Type: func() UserType { + if len(req.Type) == 0 { + return UserType("internal") } - return req.Types + return req.Type }(), Avatar: req.Avatar, - UUID: uuid.NewString(), + ID: uuid.NewString(), Details: req.Details, Preferences: func() *UserPreferences { if req.Preferences == nil { @@ -527,107 +438,6 @@ func (uc *UserController) ValidToken(c fiber.Ctx) error { return c.JSON(responses.Success(responses.SimpleResponse{Message: "valid reset token"})) } -func loadUserByID(c fiber.Ctx) (*User, error) { - id, err := strconv.Atoi(c.Params("id")) - if err != nil || id <= 0 { - return nil, fiber.NewError(fiber.StatusBadRequest, "invalid user id") - } - - db, err := db.DBFromCtx(c) - if err != nil { - return nil, err - } - - var user User - if err := db.Preload("Details").Preload("Preferences").First(&user, id).Error; err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - return nil, fiber.NewError(fiber.StatusNotFound, "user not found") - } - return nil, fiber.NewError(fiber.StatusInternalServerError, "failed to load user") - } - - return &user, nil -} - -func loadUserByUUID(c fiber.Ctx, uuid string) (*User, error) { - if uuid == "" { - return nil, fiber.NewError(fiber.StatusBadRequest, "invalid user uuid") - } - - db, err := db.DBFromCtx(c) - if err != nil { - return nil, err - } - - var user User - if err := db.Preload("Details").Preload("Preferences").First(&user, "uuid = ?", uuid).Error; err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - return nil, fiber.NewError(fiber.StatusNotFound, "user not found") - } - return nil, fiber.NewError(fiber.StatusInternalServerError, "failed to load user") - } - - return &user, nil -} - -func syncUserDetails(tx *gorm.DB, userID int, input *UserDetails) error { - if input == nil { - return tx.Where("user_id = ?", userID).Delete(&UserDetails{}).Error - } - - var details UserDetails - if err := tx.Where("user_id = ?", userID).First(&details).Error; err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - details = UserDetails{UserID: userID} - } else { - return err - } - } - - details.Title = input.Title - details.FirstName = input.FirstName - details.LastName = input.LastName - details.Address = input.Address - details.City = input.City - details.ZipCode = input.ZipCode - details.Country = input.Country - details.Phone = input.Phone - - if details.ID == 0 { - return tx.Create(&details).Error - } - return tx.Save(&details).Error -} - -func syncUserPreferences(tx *gorm.DB, userID int, input *UserPreferences) error { - if input == nil { - return tx.Where("user_id = ?", userID).Delete(&UserPreferences{}).Error - } - - var preferences UserPreferences - if err := tx.Where("user_id = ?", userID).First(&preferences).Error; err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - preferences = UserPreferences{UserID: userID} - } else { - return err - } - } - - preferences.UseIdle = input.UseIdle - preferences.IdleTimeout = input.IdleTimeout - preferences.UseIdlePassword = input.UseIdlePassword - preferences.IdlePin = input.IdlePin - preferences.UseDirectLogin = input.UseDirectLogin - preferences.UseQuadcodeLogin = input.UseQuadcodeLogin - preferences.SendNoticesMail = input.SendNoticesMail - preferences.Language = input.Language - - if preferences.ID == 0 { - return tx.Create(&preferences).Error - } - return tx.Save(&preferences).Error -} - // Me returns the authenticated user's profile (short format). func (uc *UserController) Me(c fiber.Ctx) error { @@ -638,25 +448,25 @@ func (uc *UserController) Me(c fiber.Ctx) error { tokenString := c.Get("Auth-Token") if tokenString == "" { - return c.JSON(responses.Success("missing token header")) + return fiber.NewError(fiber.StatusForbidden, "missing token header") } claims, err := tokenService.ValidateAccessToken(tokenString) if err != nil { - return c.JSON(responses.Success("bad token")) + return fiber.NewError(fiber.StatusUnauthorized, "bad token") } db, err := db.DBFromCtx(c) if err != nil { - return c.JSON(responses.Success("failed to load db")) + return fiber.NewError(fiber.StatusInternalServerError, "failed to load db") } var user User - if err := db.Preload("Details").Preload("Preferences").Where("email = ?", claims.Username).First(&user).Error; err != nil { + if err := db.Preload("Details").Preload("Preferences").Where("id = ?", claims.ID).First(&user).Error; err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { - return c.JSON(responses.Success("user not found")) + return fiber.NewError(fiber.StatusNotFound, "user not found") } - return c.JSON(responses.Success("failed to load user")) + return fiber.NewError(fiber.StatusInternalServerError, "failed to load user") } return c.JSON(responses.Success(&user)) @@ -678,7 +488,7 @@ func (us *UserController) Refresh(c fiber.Ctx) error { if claims.TokenType != tokens.TokenTypeRefresh { return fiber.NewError(fiber.StatusUnauthorized, "refresh token required") } - tokens, err := us.TockenService.GenerateTokenPair(claims.Username, auth.PermissionToString(claims.Permission)) + tokens, err := us.TockenService.GenerateTokenPair(claims.ID, claims.Permission) if err != nil { return fiber.NewError(fiber.StatusInternalServerError, err.Error()) } @@ -688,21 +498,18 @@ func (us *UserController) Refresh(c fiber.Ctx) error { // update user password by Claims func (us *UserController) UpdatePassword(c fiber.Ctx) error { var req UpdatePasswordRequest + claims := c.Locals("authClaims") + if claims == nil { + return fiber.NewError(fiber.StatusForbidden, "forbidden") + } + if err := c.Bind().Body(&req); err != nil { return fiber.NewError(fiber.StatusBadRequest, "invalid payload") } if err := validation.ValidateStruct(&req); err != nil { return err } - - db, err := db.DBFromCtx(c) - if err != nil { - return err - } - - err = UpdateUserPassword(db, req, c.Params("uuid")) - - if err != nil { + if err := UpdateUserPassword(req, claims.(tokens.Claims).ID); err != nil { return err } diff --git a/backend/internal/user/model.go b/backend/internal/user/model.go index 7b76d4a..d5985b1 100644 --- a/backend/internal/user/model.go +++ b/backend/internal/user/model.go @@ -1,77 +1,60 @@ package users import ( - "server/internal/auth" "time" + "github.com/google/uuid" "gorm.io/gorm" ) +// BeforeCreate will set a UUID rather than numeric ID. +func (base *User) BeforeCreate(tx *gorm.DB) error { + if base.ID == "" { + id, err := uuid.NewRandom() + if err != nil { + return err + } + base.ID = id.String() + } + return nil +} + type User struct { - ID int `gorm:"primaryKey"` + ID string `json:"id" gorm:"type:uuid;primary_key;"` Email string `json:"email" gorm:"uniqueIndex;size:255"` Name string `json:"name" gorm:"size:255"` Password string `json:"-" gorm:"size:255"` - Permission auth.Permission `json:"permission"` - Types UserTypes `json:"types" gorm:"type:text;serializer:json"` + Permission string `json:"permission"` + Type UserType `json:"type"` Status UserStatus `json:"status" gorm:"type:text;default:'pending'"` - ActivatedAt *time.Time `json:"activatedAt" ts:"type=Nullable"` - UUID string `json:"uuid" gorm:"size:36"` Details *UserDetails `json:"details" gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"` Preferences *UserPreferences `json:"preferences" gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"` Avatar *string `json:"avatar" gorm:"size:512"` + ActivatedAt *time.Time `json:"activatedAt" ts:"type=Nullable"` CreatedAt *time.Time `json:"createdAt,omitempty" ts:"type=Date"` UpdatedAt *time.Time `json:"updatedAt,omitempty" ts:"type=Date"` DeletedAt *gorm.DeletedAt `json:"-" gorm:"index" ` } -// UserTypes is stored as JSON array (e.g. ["internal","external"]). -type UserTypes []string - -// UserProfile is the safe full representation of a user returned by CRUD endpoints. -type UserProfile struct { - ID int `json:"id"` - Email string `json:"email"` - Name string `json:"name"` - Permission auth.Permission `json:"permission"` - Types UserTypes `json:"types"` - Status UserStatus `json:"status"` - ActivatedAt *time.Time `json:"activatedAt" ts:"type=Nullable"` - UUID string `json:"uuid"` - Details *UserDetails `json:"details"` - Preferences *UserPreferences `json:"preferences"` - Avatar *string `json:"avatar"` - CreatedAt *time.Time `json:"createdAt,omitempty" ts:"type=Date"` - UpdatedAt *time.Time `json:"updatedAt,omitempty" ts:"type=Date"` +type UpdateUserProfileRequest struct { + ID string `json:"id"` + Email string `json:"email"` + Name string `json:"name"` + Permission string `json:"permission"` + Type UserType `json:"type"` + Status UserStatus `json:"status"` } -// ToUserProfile maps a User to a full response without exposing the password hash. -func ToUserProfile(u *User) UserProfile { - if u == nil { - return UserProfile{} - } - return UserProfile{ - ID: u.ID, - Email: u.Email, - Name: u.Name, - Permission: u.Permission, - Types: u.Types, - Status: u.Status, - ActivatedAt: u.ActivatedAt, - UUID: u.UUID, - Details: u.Details, - Preferences: u.Preferences, - Avatar: u.Avatar, - CreatedAt: u.CreatedAt, - UpdatedAt: u.UpdatedAt, - } +type UpdateUserAvatarRequest struct { + ID string `json:"id" validate:"required,uuid4"` + Img []byte `json:"img"` } // UserPreferences holds per-user settings stored as JSON. type UserPreferences struct { ID int `json:"id" gorm:"primaryKey"` - UserID int `json:"userId" gorm:"index"` + UserID string `json:"userId" gorm:"type:uuid;column:user_foreign_key;not null;"` UseIdle bool `json:"useIdle"` IdleTimeout int `json:"idleTimeout"` UseIdlePassword bool `json:"useIdlePassword"` @@ -84,11 +67,24 @@ type UserPreferences struct { UpdatedAt *time.Time `json:"updatedAt,omitempty" ts:"type=Date"` } +type UpdateUserPreferencesRequest struct { + ID int `json:"id"` + UserID string `json:"userId"` + UseIdle bool `json:"useIdle"` + IdleTimeout int `json:"idleTimeout"` + UseIdlePassword bool `json:"useIdlePassword"` + IdlePin string `json:"idlePin"` + UseDirectLogin bool `json:"useDirectLogin"` + UseQuadcodeLogin bool `json:"useQuadcodeLogin"` + SendNoticesMail bool `json:"sendNoticesMail"` + Language string `json:"language"` +} + // UserDetails holds optional profile data. type UserDetails struct { ID int `json:"id" gorm:"primaryKey"` - UserID int `json:"userId" gorm:"index"` + UserID string `json:"userId" gorm:"type:uuid;column:user_foreign_key;not null;"` Title string `json:"title"` FirstName string `json:"firstName"` LastName string `json:"lastName"` @@ -101,13 +97,26 @@ type UserDetails struct { UpdatedAt *time.Time `json:"updatedAt,omitempty" ts:"type=Date"` } +type UpdateUserDetailsRequest struct { + ID int `json:"id"` + UserID string `json:"userId" gorm:"index"` + Title string `json:"title"` + FirstName string `json:"firstName"` + LastName string `json:"lastName"` + Address string `json:"address"` + City string `json:"city"` + ZipCode string `json:"zipCode"` + Country string `json:"country"` + Phone string `json:"phone"` +} + // UserDetails holds optional profile data. // Session tracks logins with browser metadata. type Session struct { - ID int `json:"id" gorm:"primaryKey"` - UserID *int `json:"userId" gorm:"index"` + ID int `gorm:"primaryKey"` + UserID *string `json:"userId" gorm:"index"` Username string `json:"username" gorm:"size:255"` AccessTokenHash string `json:"-" gorm:"size:128;index"` RefreshTokenHash string `json:"-" gorm:"size:128;index"` @@ -120,8 +129,8 @@ type Session struct { } type PasswordResetToken struct { - ID int `json:"id" gorm:"primaryKey"` - UserID int `json:"userId" gorm:"index"` + ID int `gorm:"primaryKey"` + UserID string `json:"userId" gorm:"index"` TokenHash string `json:"-" gorm:"size:64;uniqueIndex"` ExpiresAt time.Time `json:"expiresAt,omitempty" ts:"type=Date" gorm:"index"` UsedAt *time.Time `json:"usedAt,omitempty" ts:"type=Date"` @@ -140,6 +149,16 @@ const ( UserStatusDisabled UserStatus = "disabled" ) +// UserTypes represents different types of a user. +type UserType string + +// Typescript: enum=UserTypes +const ( + UserTypeInternal UserType = "internal" + UserTypeExternal UserType = "external" + UserTypeSurveyor UserType = "surveyor" +) + type LoginRequest struct { Username string `json:"username" validate:"required,email"` Password string `json:"password" validate:"required,min=8,max=128"` @@ -159,20 +178,18 @@ type ResetPasswordRequest struct { } type UpdatePasswordRequest struct { + ID string `json:"id" validate:"required,uuid4"` Password string `json:"password" validate:"required,min=8,max=128"` } type UpdateUserRequest struct { - UUID string `json:"uuid" validate:"required,uuid4"` - Name string `json:"name" validate:"required,min=1,max=255"` - Email string `json:"email" validate:"required,email"` - Password string `json:"password" validate:"omitempty,min=8,max=128"` - Permission auth.Permission `json:"permission"` - Status UserStatus `json:"status"` - Types UserTypes `json:"types"` - Avatar *string `json:"avatar,omitempty"` - Details *UserDetails `json:"details,omitempty"` - Preferences *UserPreferences `json:"preferences,omitempty"` + ID string `json:"id" validate:"required,uuid4"` + Name string `json:"name" validate:"required,min=1,max=255"` + Email string `json:"email" validate:"required,email"` + Password string `json:"password" validate:"omitempty,min=8,max=128"` + Permission string `json:"permission"` + Status UserStatus `json:"status"` + Type UserType `json:"type"` } // UserCreateRequest captures the minimal payload to create a user. @@ -181,9 +198,9 @@ type UserCreateRequest struct { Name string `json:"name" validate:"required,min=1,max=255"` Email string `json:"email" validate:"required,email"` Password string `json:"password" validate:"required,min=8,max=128"` - Permission auth.Permission `json:"permission"` + Permission string `json:"permission"` Status UserStatus `json:"status"` - Types UserTypes `json:"types"` + Type UserType `json:"type"` Avatar *string `json:"avatar,omitempty"` Details *UserDetails `json:"details,omitempty"` Preferences *UserPreferences `json:"preferences,omitempty"` diff --git a/backend/internal/user/repository.go b/backend/internal/user/repository.go new file mode 100644 index 0000000..8a10019 --- /dev/null +++ b/backend/internal/user/repository.go @@ -0,0 +1,338 @@ +package users + +import ( + "encoding/base64" + "errors" + "server/internal/db" + "server/internal/systemUtils" + "time" + + "github.com/gofiber/fiber/v3" + "github.com/google/uuid" + "gorm.io/gorm" +) + +func repositoryDB() (*gorm.DB, error) { + database, err := db.GetDB() + if err != nil { + return nil, fiber.NewError(fiber.StatusInternalServerError, "database unavailable") + } + return database, nil +} + +func CreateUser(createUserRequest UserCreateRequest) (*User, error) { + database, err := repositoryDB() + if err != nil { + return nil, err + } + + var existing User + if err := database.Where("email = ?", createUserRequest.Email).First(&existing).Error; err == nil { + return nil, fiber.NewError(fiber.StatusConflict, "user already exists") + } else if !errors.Is(err, gorm.ErrRecordNotFound) { + return nil, fiber.NewError(fiber.StatusInternalServerError, "failed to check user") + } + + hashedPassword, err := systemUtils.HashPassword(createUserRequest.Password) + if err != nil { + return nil, fiber.NewError(fiber.StatusInternalServerError, "failed to secure password") + } + + now := time.Now().UTC() + user := User{ + Email: createUserRequest.Email, + Name: createUserRequest.Name, + Password: hashedPassword, + Permission: createUserRequest.Permission, + Status: func() UserStatus { + if createUserRequest.Status == "" { + return UserStatusPending + } + return createUserRequest.Status + }(), + Type: func() UserType { + if createUserRequest.Type == "" { + return UserType("internal") + } + return createUserRequest.Type + }(), + Avatar: func() *string { + if createUserRequest.Avatar == nil { + return nil + } + return createUserRequest.Avatar + }(), + ID: uuid.NewString(), + Details: func() *UserDetails { + if createUserRequest.Details == nil { + return nil + } + return createUserRequest.Details + }(), + Preferences: func() *UserPreferences { + if createUserRequest.Preferences == nil { + return nil + } + return createUserRequest.Preferences + }(), + CreatedAt: &now, + UpdatedAt: &now, + } + + if err := database.Create(&user).Error; err != nil { + return nil, fiber.NewError(fiber.StatusInternalServerError, "failed to create user") + } + + return GetUserByID(user.ID) +} + +func UpdateUser(updateUserRequest UpdateUserRequest) (*User, error) { + database, err := repositoryDB() + if err != nil { + return nil, err + } + + user, err := GetUserByID(updateUserRequest.ID) + if err != nil { + return nil, err + } + + now := time.Now().UTC() + user.Name = updateUserRequest.Name + user.Email = updateUserRequest.Email + user.UpdatedAt = &now + user.Permission = updateUserRequest.Permission + if updateUserRequest.Status != "" { + user.Status = updateUserRequest.Status + } + if updateUserRequest.Type != "" { + user.Type = updateUserRequest.Type + } + user.Permission = updateUserRequest.Permission + + if err := database.Transaction(func(tx *gorm.DB) error { + if err := tx.Save(user).Error; err != nil { + return err + } + return nil + }); err != nil { + return nil, fiber.NewError(fiber.StatusInternalServerError, "failed to update user") + } + + return GetUserByID(user.ID) +} + +func UpdateUserDetails(updateUserDetails UpdateUserDetailsRequest) error { + database, err := repositoryDB() + if err != nil { + return err + } + if updateUserDetails.UserID == "" { + return fiber.NewError(fiber.StatusBadRequest, "invalid user id") + } + + input := &UserDetails{ + UserID: updateUserDetails.UserID, + Title: updateUserDetails.Title, + FirstName: updateUserDetails.FirstName, + LastName: updateUserDetails.LastName, + Address: updateUserDetails.Address, + City: updateUserDetails.City, + ZipCode: updateUserDetails.ZipCode, + Country: updateUserDetails.Country, + Phone: updateUserDetails.Phone, + } + + if err := database.Transaction(func(tx *gorm.DB) error { + return syncUserDetails(tx, updateUserDetails.UserID, input) + }); err != nil { + return fiber.NewError(fiber.StatusInternalServerError, "failed to update user details") + } + return nil +} + +func UpdateUserPreferences(updateUserPreferences UpdateUserPreferencesRequest) error { + database, err := repositoryDB() + if err != nil { + return err + } + if updateUserPreferences.UserID == "" { + return fiber.NewError(fiber.StatusBadRequest, "invalid user id") + } + + input := &UserPreferences{ + UserID: updateUserPreferences.UserID, + UseIdle: updateUserPreferences.UseIdle, + IdleTimeout: updateUserPreferences.IdleTimeout, + UseIdlePassword: updateUserPreferences.UseIdlePassword, + IdlePin: updateUserPreferences.IdlePin, + UseDirectLogin: updateUserPreferences.UseDirectLogin, + UseQuadcodeLogin: updateUserPreferences.UseQuadcodeLogin, + SendNoticesMail: updateUserPreferences.SendNoticesMail, + Language: updateUserPreferences.Language, + } + + if err := database.Transaction(func(tx *gorm.DB) error { + return syncUserPreferences(tx, updateUserPreferences.UserID, input) + }); err != nil { + return fiber.NewError(fiber.StatusInternalServerError, "failed to update user preferences") + } + return nil +} + +func UpdateUserAvatar(updateUserAvatarRequest UpdateUserAvatarRequest) (*User, error) { + database, err := repositoryDB() + if err != nil { + return nil, err + } + + user, err := GetUserByID(updateUserAvatarRequest.ID) + if err != nil { + return nil, err + } + + avatar := base64.StdEncoding.EncodeToString(updateUserAvatarRequest.Img) + now := time.Now().UTC() + if err := database.Model(user).Updates(map[string]any{ + "avatar": avatar, + "updated_at": now, + }).Error; err != nil { + return nil, fiber.NewError(fiber.StatusInternalServerError, "failed to update user avatar") + } + + return GetUserByID(user.ID) +} + +func UpdateUserPassword(req UpdatePasswordRequest, id string) error { + database, err := repositoryDB() + if err != nil { + return err + } + user := User{} + if err := database.Where("uuid = ?", id).First(&user).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return fiber.NewError(fiber.StatusNotFound, "user not found") + } + return fiber.NewError(fiber.StatusInternalServerError, "failed to load user") + } + hashedPassword, err := systemUtils.HashPassword(req.Password) + if err != nil { + return fiber.NewError(fiber.StatusInternalServerError, "failed to secure password") + } + now := time.Now().UTC() + if err := database.Model(&user).Updates(map[string]any{ + "password": hashedPassword, + "updated_at": now, + }).Error; err != nil { + return fiber.NewError(fiber.StatusInternalServerError, "failed to update password") + } + if err := database.Where("user_id = ?", user.ID).Delete(&Session{}).Error; err != nil { + return fiber.NewError(fiber.StatusInternalServerError, "failed to revoke sessions") + } + return nil +} + +func GetUserByID(id string) (*User, error) { + if id == "" { + return nil, fiber.NewError(fiber.StatusBadRequest, "invalid user id") + } + + database, err := repositoryDB() + if err != nil { + return nil, err + } + + var user User + if err := database.Preload("Details").Preload("Preferences").First(&user, "id = ?", id).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + return nil, fiber.NewError(fiber.StatusNotFound, "user not found") + } + return nil, fiber.NewError(fiber.StatusInternalServerError, "failed to load user") + } + + return &user, nil +} + +func DeleteUser(uuid string) error { + database, err := repositoryDB() + if err != nil { + return err + } + + user, err := GetUserByID(uuid) + if err != nil { + return err + } + + if err := database.Transaction(func(tx *gorm.DB) error { + if err := tx.Where("user_id = ?", user.ID).Delete(&UserDetails{}).Error; err != nil { + return err + } + if err := tx.Where("user_id = ?", user.ID).Delete(&UserPreferences{}).Error; err != nil { + return err + } + return tx.Delete(user).Error + }); err != nil { + return fiber.NewError(fiber.StatusInternalServerError, "failed to delete user") + } + + return nil +} + +func syncUserDetails(tx *gorm.DB, userID string, input *UserDetails) error { + if input == nil { + return tx.Where("user_id = ?", userID).Delete(&UserDetails{}).Error + } + + var details UserDetails + if err := tx.Where("user_id = ?", userID).First(&details).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + details = UserDetails{UserID: userID} + } else { + return err + } + } + + details.Title = input.Title + details.FirstName = input.FirstName + details.LastName = input.LastName + details.Address = input.Address + details.City = input.City + details.ZipCode = input.ZipCode + details.Country = input.Country + details.Phone = input.Phone + + if details.ID == 0 { + return tx.Create(&details).Error + } + return tx.Save(&details).Error +} + +func syncUserPreferences(tx *gorm.DB, userID string, input *UserPreferences) error { + if input == nil { + return tx.Where("user_id = ?", userID).Delete(&UserPreferences{}).Error + } + + var preferences UserPreferences + if err := tx.Where("user_id = ?", userID).First(&preferences).Error; err != nil { + if errors.Is(err, gorm.ErrRecordNotFound) { + preferences = UserPreferences{UserID: userID} + } else { + return err + } + } + + preferences.UseIdle = input.UseIdle + preferences.IdleTimeout = input.IdleTimeout + preferences.UseIdlePassword = input.UseIdlePassword + preferences.IdlePin = input.IdlePin + preferences.UseDirectLogin = input.UseDirectLogin + preferences.UseQuadcodeLogin = input.UseQuadcodeLogin + preferences.SendNoticesMail = input.SendNoticesMail + preferences.Language = input.Language + + if preferences.ID == 0 { + return tx.Create(&preferences).Error + } + return tx.Save(&preferences).Error +} diff --git a/backend/internal/user/repository.md b/backend/internal/user/repository.md new file mode 100644 index 0000000..87670aa --- /dev/null +++ b/backend/internal/user/repository.md @@ -0,0 +1,8 @@ +CreateUser(createUserRequest CreateUserRequest) +UpdateUser(updateUserRequest UpdateUserRequest) +UpadteUserDetails(upadteUserDetails UpadteUserDetailsRequest) +UpdateUserPreferences(updateUserPreferences UpdateUserPreferencesRequest) +UpdateUserAvatar(updateUserAvatarRequest UpdateUserAvatarRequest) +UpdatePassword(updatePasswordRequest UpdatePasswordRequest) +GetUserByUUID(uuid string) +DeleteUser(uuid string) \ No newline at end of file diff --git a/backend/internal/user/rerpository.go b/backend/internal/user/rerpository.go deleted file mode 100644 index 0eb4137..0000000 --- a/backend/internal/user/rerpository.go +++ /dev/null @@ -1,35 +0,0 @@ -package users - -import ( - "errors" - "server/internal/systemUtils" - "time" - - "github.com/gofiber/fiber/v3" - "gorm.io/gorm" -) - -func UpdateUserPassword(db *gorm.DB, req UpdatePasswordRequest, uuid string) error { - user := User{} - if err := db.Where("uuid = ?", uuid).First(&user).Error; err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - return fiber.NewError(fiber.StatusNotFound, "user not found") - } - return fiber.NewError(fiber.StatusInternalServerError, "failed to load user") - } - hashedPassword, err := systemUtils.HashPassword(req.Password) - if err != nil { - return fiber.NewError(fiber.StatusInternalServerError, "failed to secure password") - } - now := time.Now().UTC() - if err := db.Model(&user).Updates(map[string]any{ - "password": hashedPassword, - "updated_at": now, - }).Error; err != nil { - return fiber.NewError(fiber.StatusInternalServerError, "failed to update password") - } - if err := db.Where("user_id = ?", user.ID).Delete(&Session{}).Error; err != nil { - return fiber.NewError(fiber.StatusInternalServerError, "failed to revoke sessions") - } - return nil -} diff --git a/backend/internal/user/routes.go b/backend/internal/user/routes.go index 199ad8a..a5ac3b1 100644 --- a/backend/internal/user/routes.go +++ b/backend/internal/user/routes.go @@ -24,8 +24,8 @@ func RegisterUserRoutes(app fiber.Router) { userController := NewUserController(tockenService) - // Typescript: TSEndpoint= path=/api/users/:uuid; name=getUser; method=GET; response=users.User - app.Get("/users/:uuid", userController.GetUser) + // Typescript: TSEndpoint= path=/api/users/:id; name=getUser; method=GET; response=users.User + app.Get("/users/:id", userController.GetUser) // Typescript: TSEndpoint= path=/api/users; name=createUser; method=POST; request=users.UserCreateRequest; response=users.User app.Post("/users", userController.CreateUser) @@ -33,8 +33,11 @@ func RegisterUserRoutes(app fiber.Router) { // Typescript: TSEndpoint= path=/api/users/update; name=updateUser; method=PUT; request=users.UpdateUserRequest; response=users.User app.Put("/users/update", userController.UpdateUser) - // Typescript: TSEndpoint= path=/api/users/:uuid; name=deleteUser; method=DELETE; response=responses.SimpleResponse - app.Delete("/users/:uuid", userController.DeleteUser) + // Typescript: TSEndpoint= path=/api/users/update/details; name=updateUserDetails; method=PUT; request=users.UpdateUserDetailsRequest; response=users.User + app.Put("/users/update/details", userController.UpdateUserDetails) + + // Typescript: TSEndpoint= path=/api/users/:id; name=deleteUser; method=DELETE; response=responses.SimpleResponse + app.Delete("/users/:id", userController.DeleteUser) // Typescript: TSEndpoint= path=/api/auth/me; name=me; method=GET; response=users.User app.Get("/auth/me", middleware.AuthMe, userController.Me) diff --git a/frontend/.env b/frontend/.env index f985471..b0f22de 100644 --- a/frontend/.env +++ b/frontend/.env @@ -2,3 +2,4 @@ GO_PROJECT_DIR=/Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/http/static # Option B (overrides GO_PROJECT_DIR): explicit target dir where dist/spa is copied # GO_SPA_TARGET_DIR=/absolute/path/to/your/go/project/spa +SEED=0 diff --git a/frontend/quasar.config.ts b/frontend/quasar.config.ts index 168d51e..ee93a36 100644 --- a/frontend/quasar.config.ts +++ b/frontend/quasar.config.ts @@ -116,7 +116,7 @@ export default defineConfig((ctx) => { // directives: [], // Quasar plugins - plugins: ['Notify', 'Dialog', 'Loading'], + plugins: ['Notify', 'Dialog', 'Loading', 'AppVisibility'], }, // animations: 'all', // --- includes all animations diff --git a/frontend/src/App.vue b/frontend/src/App.vue index a43423a..82f3c56 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -5,11 +5,14 @@ diff --git a/frontend/src/api/admin.ts b/frontend/src/api/admin.ts index 89fb1ee..0eecc50 100644 --- a/frontend/src/api/admin.ts +++ b/frontend/src/api/admin.ts @@ -2,9 +2,21 @@ import { api } from "./api"; import type { Nullable } from "./apiTypes.ts"; import type * as users from "./users.ts"; +// Typescript: TSEndpoint= path=/api/admin/users; name=listUsers; method=POST; request=admin.ListUsersRequest; response=admin.ListUsersResponse + +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/admin/routes.go Line: 13 +export const listUsers = async ( + data: ListUsersRequest, +): Promise<{ data: ListUsersResponse; error: Nullable }> => { + return (await api.POST("/api/admin/users", data)) as { + data: ListUsersResponse; + error: Nullable; + }; +}; + // Typescript: TSEndpoint= path=/api/admin/users/block; name=blockUser; method=PUT; request=admin.BlockUserRequest; response=users.User -// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/admin/routes.go Line: 14 +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/admin/routes.go Line: 18 export const blockUser = async ( data: BlockUserRequest, ): Promise<{ data: users.User; error: Nullable }> => { @@ -14,14 +26,38 @@ export const blockUser = async ( }; }; -// Typescript: TSEndpoint= path=/api/admin/users; name=listUsers; method=POST; request=admin.ListUsersRequest; response=admin.ListUsersResponse +// Typescript: TSEndpoint= path=/api/admin/updateUser; name=updateUser; method=PUT; request=users.UpdateUserRequest; response=users.User -// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/admin/routes.go Line: 11 -export const listUsers = async ( - data: ListUsersRequest, -): Promise<{ data: ListUsersResponse; error: Nullable }> => { - return (await api.POST("/api/admin/users", data)) as { - data: ListUsersResponse; +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/admin/routes.go Line: 23 +export const updateUser = async ( + data: users.UpdateUserRequest, +): Promise<{ data: users.User; error: Nullable }> => { + return (await api.PUT("/api/admin/updateUser", data)) as { + data: users.User; + error: Nullable; + }; +}; + +// Typescript: TSEndpoint= path=/api/admin/updateuserdetails; name=adminUpdateUserDetails; method=PUT; request=users.UpdateUserDetailsRequest; response=users.User + +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/admin/routes.go Line: 28 +export const adminUpdateUserDetails = async ( + data: users.UpdateUserDetailsRequest, +): Promise<{ data: users.User; error: Nullable }> => { + return (await api.PUT("/api/admin/updateuserdetails", data)) as { + data: users.User; + error: Nullable; + }; +}; + +// Typescript: TSEndpoint= path=/api/admin/updateuserpreferences; name=adminUpdateUserPreferences; method=PUT; request=users.UpdateUserPreferencesRequest; response=users.User + +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/admin/routes.go Line: 33 +export const adminUpdateUserPreferences = async ( + data: users.UpdateUserPreferencesRequest, +): Promise<{ data: users.User; error: Nullable }> => { + return (await api.PUT("/api/admin/updateuserpreferences", data)) as { + data: users.User; error: Nullable; }; }; @@ -33,7 +69,7 @@ export interface ListUsersResponse { } export interface BlockUserRequest { - uuid: string; + id: string; action: string; } diff --git a/frontend/src/api/api.ts b/frontend/src/api/api.ts index 8e12ec8..d90cedf 100644 --- a/frontend/src/api/api.ts +++ b/frontend/src/api/api.ts @@ -4,7 +4,7 @@ // // This file was generated by github.com/millevolte/ts-rpc // -// May 05, 2026 14:14:16 UTC +// May 08, 2026 12:28:15 UTC // export interface ApiRestResponse { diff --git a/frontend/src/api/auth.ts b/frontend/src/api/auth.ts index c951d35..cf33dfd 100644 --- a/frontend/src/api/auth.ts +++ b/frontend/src/api/auth.ts @@ -1,30 +1,12 @@ -import { api } from "./api"; -import type { Nullable, Record } from "./apiTypes.ts"; +export type UserRole = (typeof EnumUserRole)[keyof typeof EnumUserRole]; -// Typescript: TSEndpoint= path=/api/roles; name=getRoles; method=GET; response=auth.AllRoles +export type RolesData = string; -// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/auth/routes.go Line: 7 -export const getRoles = async (): Promise<{ - data: AllRoles; - error: Nullable; -}> => { - return (await api.GET("/api/roles")) as { - data: AllRoles; - error: Nullable; - }; -}; -export type EnumPermission = - (typeof EnumEnumPermission)[keyof typeof EnumEnumPermission]; - -export type Permission = string; - -export type AllRoles = Record; - -export const EnumEnumPermission = { - RoleSuperAdmin: "superadmin", - RoleAdmin: "admin", - RoleManager: "manager", - RoleContentCreator: "content_creator", - RoleUser: "user", - RoleGuest: "guest", +export const EnumUserRole = { + SuperAdminRole: "superadmin", + AdminRole: "admin", + ManagerRole: "manager", + ContentCreatorRole: "content_creator", + UserRole: "user", + GuestRole: "guest", } as const; diff --git a/frontend/src/api/systemUtils.ts b/frontend/src/api/systemUtils.ts index 6c3bda3..3a86047 100644 --- a/frontend/src/api/systemUtils.ts +++ b/frontend/src/api/systemUtils.ts @@ -1,6 +1,19 @@ import { api } from "./api"; import type { Nullable } from "./apiTypes.ts"; +// Typescript: TSEndpoint= path=/health; name=health; method=GET; response=string + +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/systemUtils/routes.go Line: 36 +export const health = async (): Promise<{ + data: string; + error: Nullable; +}> => { + return (await api.GET("/health")) as { + data: string; + error: Nullable; + }; +}; + // Typescript: TSEndpoint= path=/metrics; name=metrics; method=GET; response=string // /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/systemUtils/routes.go Line: 39 @@ -27,19 +40,6 @@ export const mailDebug = async (): Promise<{ }; }; -// Typescript: TSEndpoint= path=/health; name=health; method=GET; response=string - -// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/systemUtils/routes.go Line: 36 -export const health = async (): Promise<{ - data: string; - error: Nullable; -}> => { - return (await api.GET("/health")) as { - data: string; - error: Nullable; - }; -}; - export interface MailDebugItem { name: string; content: string; diff --git a/frontend/src/api/users.ts b/frontend/src/api/users.ts index 0fdf12a..3df1009 100644 --- a/frontend/src/api/users.ts +++ b/frontend/src/api/users.ts @@ -1,36 +1,11 @@ import { api } from "./api"; import type { Nullable } from "./apiTypes.ts"; -import type * as auth from "./auth.ts"; -import type * as responses from "./responses.ts"; import type * as tokens from "./tokens.ts"; - -// Typescript: TSEndpoint= path=/api/auth/password/reset; name=resetPassword; method=POST; request=users.ResetPasswordRequest; response=responses.SimpleResponse - -// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 55 -export const resetPassword = async ( - data: ResetPasswordRequest, -): Promise<{ data: responses.SimpleResponse; error: Nullable }> => { - return (await api.POST("/api/auth/password/reset", data)) as { - data: responses.SimpleResponse; - error: Nullable; - }; -}; - -// Typescript: TSEndpoint= path=/api/auth/password/valid; name=validToken; method=POST; request=string; response=responses.SimpleResponse - -// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 58 -export const validToken = async ( - data: string, -): Promise<{ data: responses.SimpleResponse; error: Nullable }> => { - return (await api.POST("/api/auth/password/valid", data)) as { - data: responses.SimpleResponse; - error: Nullable; - }; -}; +import type * as responses from "./responses.ts"; // Typescript: TSEndpoint= path=/api/auth/me; name=me; method=GET; response=users.User -// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 40 +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 43 export const me = async (): Promise<{ data: User; error: Nullable; @@ -41,21 +16,9 @@ export const me = async (): Promise<{ }; }; -// Typescript: TSEndpoint= path=/api/auth/password/forgot; name=forgotPassword; method=POST; request=users.ForgotPasswordRequest; response=responses.SimpleResponse - -// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 52 -export const forgotPassword = async ( - data: ForgotPasswordRequest, -): Promise<{ data: responses.SimpleResponse; error: Nullable }> => { - return (await api.POST("/api/auth/password/forgot", data)) as { - data: responses.SimpleResponse; - error: Nullable; - }; -}; - // Typescript: TSEndpoint= path=/api/auth/password/update; name=updatePassword; method=PUT; request=users.UpdatePasswordRequest; response=responses.SimpleResponse -// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 61 +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 64 export const updatePassword = async ( data: UpdatePasswordRequest, ): Promise<{ data: responses.SimpleResponse; error: Nullable }> => { @@ -65,13 +28,121 @@ export const updatePassword = async ( }; }; -// Typescript: TSEndpoint= path=/api/users/:uuid; name=getUser; method=GET; response=users.User +// Typescript: TSEndpoint= path=/api/users; name=createUser; method=POST; request=users.UserCreateRequest; response=users.User + +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 31 +export const createUser = async ( + data: UserCreateRequest, +): Promise<{ data: User; error: Nullable }> => { + return (await api.POST("/api/users", data)) as { + data: User; + error: Nullable; + }; +}; + +// Typescript: TSEndpoint= path=/api/users/update/details; name=updateUserDetails; method=PUT; request=users.UpdateUserDetailsRequest; response=users.User + +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 37 +export const updateUserDetails = async ( + data: UpdateUserDetailsRequest, +): Promise<{ data: User; error: Nullable }> => { + return (await api.PUT("/api/users/update/details", data)) as { + data: User; + error: Nullable; + }; +}; + +// Typescript: TSEndpoint= path=/api/auth/refresh; name=refresh; method=POST; request=users.RefreshRequest; response=tokens.TokenPair + +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 49 +export const refresh = async ( + data: RefreshRequest, +): Promise<{ data: tokens.TokenPair; error: Nullable }> => { + return (await api.POST("/api/auth/refresh", data)) as { + data: tokens.TokenPair; + error: Nullable; + }; +}; + +// Typescript: TSEndpoint= path=/api/auth/password/reset; name=resetPassword; method=POST; request=users.ResetPasswordRequest; response=responses.SimpleResponse + +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 58 +export const resetPassword = async ( + data: ResetPasswordRequest, +): Promise<{ data: responses.SimpleResponse; error: Nullable }> => { + return (await api.POST("/api/auth/password/reset", data)) as { + data: responses.SimpleResponse; + error: Nullable; + }; +}; + +// Typescript: TSEndpoint= path=/api/auth/register; name=register; method=POST; request=users.UserCreateRequest; response=users.User + +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 52 +export const register = async ( + data: UserCreateRequest, +): Promise<{ data: User; error: Nullable }> => { + return (await api.POST("/api/auth/register", data)) as { + data: User; + error: Nullable; + }; +}; + +// Typescript: TSEndpoint= path=/api/users/:id; name=deleteUser; method=DELETE; response=responses.SimpleResponse + +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 40 +export const deleteUser = async ( + id: string, +): Promise<{ data: responses.SimpleResponse; error: Nullable }> => { + return (await api.DELETE(`/api/users/${id}`)) as { + data: responses.SimpleResponse; + error: Nullable; + }; +}; + +// Typescript: TSEndpoint= path=/api/auth/login; name=login; method=POST; request=users.LoginRequest; response=tokens.TokenPair + +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 46 +export const login = async ( + data: LoginRequest, +): Promise<{ data: tokens.TokenPair; error: Nullable }> => { + return (await api.POST("/api/auth/login", data)) as { + data: tokens.TokenPair; + error: Nullable; + }; +}; + +// Typescript: TSEndpoint= path=/api/auth/password/forgot; name=forgotPassword; method=POST; request=users.ForgotPasswordRequest; response=responses.SimpleResponse + +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 55 +export const forgotPassword = async ( + data: ForgotPasswordRequest, +): Promise<{ data: responses.SimpleResponse; error: Nullable }> => { + return (await api.POST("/api/auth/password/forgot", data)) as { + data: responses.SimpleResponse; + error: Nullable; + }; +}; + +// Typescript: TSEndpoint= path=/api/auth/password/valid; name=validToken; method=POST; request=string; response=responses.SimpleResponse + +// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 61 +export const validToken = async ( + data: string, +): Promise<{ data: responses.SimpleResponse; error: Nullable }> => { + return (await api.POST("/api/auth/password/valid", data)) as { + data: responses.SimpleResponse; + error: Nullable; + }; +}; + +// Typescript: TSEndpoint= path=/api/users/:id; name=getUser; method=GET; response=users.User // /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 28 export const getUser = async ( - uuid: string, + id: string, ): Promise<{ data: User; error: Nullable }> => { - return (await api.GET(`/api/users/${uuid}`)) as { + return (await api.GET(`/api/users/${id}`)) as { data: User; error: Nullable; }; @@ -89,109 +160,9 @@ export const updateUser = async ( }; }; -// Typescript: TSEndpoint= path=/api/users/:uuid; name=deleteUser; method=DELETE; response=responses.SimpleResponse - -// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 37 -export const deleteUser = async ( - uuid: string, -): Promise<{ data: responses.SimpleResponse; error: Nullable }> => { - return (await api.DELETE(`/api/users/${uuid}`)) as { - data: responses.SimpleResponse; - error: Nullable; - }; -}; - -// Typescript: TSEndpoint= path=/api/auth/login; name=login; method=POST; request=users.LoginRequest; response=tokens.TokenPair - -// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 43 -export const login = async ( - data: LoginRequest, -): Promise<{ data: tokens.TokenPair; error: Nullable }> => { - return (await api.POST("/api/auth/login", data)) as { - data: tokens.TokenPair; - error: Nullable; - }; -}; - -// Typescript: TSEndpoint= path=/api/auth/register; name=register; method=POST; request=users.UserCreateRequest; response=users.User - -// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 49 -export const register = async ( - data: UserCreateRequest, -): Promise<{ data: User; error: Nullable }> => { - return (await api.POST("/api/auth/register", data)) as { - data: User; - error: Nullable; - }; -}; - -// Typescript: TSEndpoint= path=/api/users; name=createUser; method=POST; request=users.UserCreateRequest; response=users.User - -// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 31 -export const createUser = async ( - data: UserCreateRequest, -): Promise<{ data: User; error: Nullable }> => { - return (await api.POST("/api/users", data)) as { - data: User; - error: Nullable; - }; -}; - -// Typescript: TSEndpoint= path=/api/auth/refresh; name=refresh; method=POST; request=users.RefreshRequest; response=tokens.TokenPair - -// /Users/fabio/CODE/omnimed/go-quasar-partial-ssr/backend/internal/user/routes.go Line: 46 -export const refresh = async ( - data: RefreshRequest, -): Promise<{ data: tokens.TokenPair; error: Nullable }> => { - return (await api.POST("/api/auth/refresh", data)) as { - data: tokens.TokenPair; - error: Nullable; - }; -}; - -export interface UserCreateRequest { - name: string; - email: string; - password: string; - permission: auth.Permission; - status: UserStatus; - types: UserTypes; - avatar: Nullable; - details: Nullable; - preferences: Nullable; -} - -export interface UserPreferences { - id: number; - userId: number; - useIdle: boolean; - idleTimeout: number; - useIdlePassword: boolean; - idlePin: string; - useDirectLogin: boolean; - useQuadcodeLogin: boolean; - sendNoticesMail: boolean; - language: string; - createdAt: Nullable; - updatedAt: Nullable; -} - -export interface RefreshRequest { - refresh_token: string; -} - -export interface ResetPasswordRequest { - token: string; - password: string; -} - -export interface UpdatePasswordRequest { - password: string; -} - export interface UserDetails { id: number; - userId: number; + userId: string; title: string; firstName: string; lastName: string; @@ -200,39 +171,78 @@ export interface UserDetails { zipCode: string; country: string; phone: string; - createdAt: Nullable; - updatedAt: Nullable; -} - -export interface LoginRequest { - username: string; - password: string; + createdAt?: Date; + updatedAt?: Date; } export interface UpdateUserRequest { - uuid: string; + id: string; name: string; email: string; password: string; - permission: auth.Permission; + permission: string; status: UserStatus; - types: UserTypes; - avatar: Nullable; - details: Nullable; - preferences: Nullable; + type: UserType; +} + +export interface UpdateUserDetailsRequest { + id: number; + userId: string; + title: string; + firstName: string; + lastName: string; + address: string; + city: string; + zipCode: string; + country: string; + phone: string; +} + +export interface RefreshRequest { + refresh_token: string; +} + +export interface UpdateUserPreferencesRequest { + id: number; + userId: string; + useIdle: boolean; + idleTimeout: number; + useIdlePassword: boolean; + idlePin: string; + useDirectLogin: boolean; + useQuadcodeLogin: boolean; + sendNoticesMail: boolean; + language: string; +} + +export interface UserCreateRequest { + name: string; + email: string; + password: string; + permission: string; + status: UserStatus; + type: UserType; + avatar?: Nullable; + details?: Nullable; + preferences?: Nullable; +} + +export interface UpdatePasswordRequest { + id: string; + password: string; } export interface User { + id: string; email: string; name: string; - permission: auth.Permission; - types: UserTypes; + permission: string; + type: UserType; status: UserStatus; - activatedAt: Nullable; - uuid: string; details: Nullable; preferences: Nullable; avatar: Nullable; + activatedAt: Nullable; createdAt?: Date; updatedAt?: Date; } @@ -241,12 +251,45 @@ export interface ForgotPasswordRequest { email: string; } +export interface UserPreferences { + id: number; + userId: string; + useIdle: boolean; + idleTimeout: number; + useIdlePassword: boolean; + idlePin: string; + useDirectLogin: boolean; + useQuadcodeLogin: boolean; + sendNoticesMail: boolean; + language: string; + createdAt?: Date; + updatedAt?: Date; +} + +export interface LoginRequest { + username: string; + password: string; +} + +export interface ResetPasswordRequest { + token: string; + password: string; +} + +export type UserTypes = (typeof EnumUserTypes)[keyof typeof EnumUserTypes]; + export type UserStatus = string; -export type UserTypes = string[]; +export type UserType = string; export const EnumUserStatus = { UserStatusPending: "pending", UserStatusActive: "active", UserStatusDisabled: "disabled", } as const; + +export const EnumUserTypes = { + UserTypeInternal: "internal", + UserTypeExternal: "external", + UserTypeSurveyor: "surveyor", +} as const; diff --git a/frontend/src/layouts/AdminLayout.vue b/frontend/src/layouts/AdminLayout.vue index 161404d..5350e7e 100644 --- a/frontend/src/layouts/AdminLayout.vue +++ b/frontend/src/layouts/AdminLayout.vue @@ -46,6 +46,10 @@ +

+ {{userStore.userData ? `Logged in as: ${userStore.userData} ` : 'Not logged in'}}
+ +
@@ -55,13 +59,28 @@ diff --git a/frontend/src/pages/admin/UsersPage.vue b/frontend/src/pages/admin/UsersPage.vue index 6191301..34c8d28 100644 --- a/frontend/src/pages/admin/UsersPage.vue +++ b/frontend/src/pages/admin/UsersPage.vue @@ -117,25 +117,25 @@ - + Show - + Edit - + Edit avatar - + @@ -167,415 +167,68 @@ - - - - -
-
-
{{ dialogMode === 'create' ? 'Nuovo utente' : dialogMode === 'edit' ? 'Modifica utente' : 'Dettaglio utente' }}
-
{{ form.name || 'Profilo utente' }}
-
{{ form.email || 'Compila i dati di base' }}
-
-
+ -
- - -
+ - - - - - -
+ - - - - - -
-

Account

-
- - - -
-
- - {{ avatarInitials(form) }} -
-
-
Avatar
-
- {{ form.avatar ? 'Avatar profilo impostato' : 'Nessun avatar impostato' }} -
-
- -
- - - - -
-
-
- - -
-
-

Details

- -
-
- - - - - - - - -
-
-
- - -
-
-

Preferences

- -
-
- - - - - - - - -
-
-
-
-
-
-
-
- - - - -
Change password
-
{{ passwordDialogUserEmail || 'User' }}
-
- - - - - - - - - - - - -
-
- - - - -
User access
-
{{ blockDialogUser.email || 'User' }}
-
- Stato attuale: {{ blockDialogUser.status || 'n/a' }} -
-
- - - - - -
- {{ - blockDialogBlocked - ? 'L’utente non potra piu accedere finche non verra sbloccato.' - : 'L’utente potra accedere normalmente.' - }} -
-
- - - - - -
-
- - - - -
-
-
Avatar editor
-
{{ avatarDialogUser.email || 'User avatar' }}
-
Ritaglio circolare per il profilo utente
-
-
- -
- - -
-
- - - - -
- - - - -
- {{ avatarFile?.name || 'Nessun file selezionato' }} -
- - -
- -
-
-
- -
-
- Seleziona un’immagine per modificare l’avatar. -
-
- -
-
Anteprima
-
- Avatar preview - No avatar -
-
-
-
-
-
+ + + diff --git a/frontend/src/pages/admin/dialogs/UserBlockDialog.vue b/frontend/src/pages/admin/dialogs/UserBlockDialog.vue new file mode 100644 index 0000000..9f579a8 --- /dev/null +++ b/frontend/src/pages/admin/dialogs/UserBlockDialog.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/frontend/src/pages/admin/dialogs/UserEditorDialog.vue b/frontend/src/pages/admin/dialogs/UserEditorDialog.vue new file mode 100644 index 0000000..ef75903 --- /dev/null +++ b/frontend/src/pages/admin/dialogs/UserEditorDialog.vue @@ -0,0 +1,636 @@ + + + + + + + diff --git a/frontend/src/pages/admin/dialogs/UserPasswordDialog.vue b/frontend/src/pages/admin/dialogs/UserPasswordDialog.vue new file mode 100644 index 0000000..268b5a3 --- /dev/null +++ b/frontend/src/pages/admin/dialogs/UserPasswordDialog.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/frontend/src/pages/admin/dialogs/types.ts b/frontend/src/pages/admin/dialogs/types.ts new file mode 100644 index 0000000..e349555 --- /dev/null +++ b/frontend/src/pages/admin/dialogs/types.ts @@ -0,0 +1,114 @@ +import type { User, UserDetails, UserPreferences, UserStatus } from 'src/api/users'; + +export type DialogMode = 'create' | 'edit' | 'view'; + +export type EditorTab = 'account' | 'details' | 'preferences'; + +export type UserDetailsForm = Omit; + +export type UserPreferencesForm = Omit; + +export interface UserFormState { + id: string; + name: string; + email: string; + password: string; + status: UserStatus; + permission: string; + type: string; + avatar: string; + details: UserDetailsForm; + preferences: UserPreferencesForm; +} + +export interface PasswordFormState { + password: string; + confirmPassword: string; +} + +export interface BlockDialogState { + id: string; + email: string; + status: UserStatus; + blocked: boolean; +} + +export interface AvatarDialogState { + id: string; + email: string; + avatar: string; +} + +export function createEmptyUserForm(): UserFormState { + return { + id: '', + name: '', + email: '', + password: '', + status: 'pending', + permission: 'user', + type: 'internal', + avatar: '', + details: { + id: 0, + userId: '', + title: '', + firstName: '', + lastName: '', + address: '', + city: '', + zipCode: '', + country: '', + phone: '', + }, + preferences: { + id: 0, + userId: '', + useIdle: false, + idleTimeout: 0, + useIdlePassword: false, + idlePin: '', + useDirectLogin: false, + useQuadcodeLogin: false, + sendNoticesMail: false, + language: 'it', + }, + }; +} + +export function mapUserToForm(user: User): UserFormState { + return { + id: user.id, + name: user.name, + email: user.email, + password: '', + status: user.status, + permission: user.permission, + type: user.type, + avatar: user.avatar ?? '', + details: { + id: user.details?.id ?? 0, + userId: user.details?.userId ?? '', + title: user.details?.title ?? '', + firstName: user.details?.firstName ?? '', + lastName: user.details?.lastName ?? '', + address: user.details?.address ?? '', + city: user.details?.city ?? '', + zipCode: user.details?.zipCode ?? '', + country: user.details?.country ?? '', + phone: user.details?.phone ?? '', + }, + preferences: { + id: user.preferences?.id ?? 0, + userId: user.preferences?.userId ?? '', + useIdle: user.preferences?.useIdle ?? false, + idleTimeout: user.preferences?.idleTimeout ?? 0, + useIdlePassword: user.preferences?.useIdlePassword ?? false, + idlePin: user.preferences?.idlePin ?? '', + useDirectLogin: user.preferences?.useDirectLogin ?? false, + useQuadcodeLogin: user.preferences?.useQuadcodeLogin ?? false, + sendNoticesMail: user.preferences?.sendNoticesMail ?? false, + language: user.preferences?.language ?? 'it', + }, + }; +} diff --git a/frontend/src/pages/dev/SignupPage.vue b/frontend/src/pages/dev/SignupPage.vue index b81f5ca..3232346 100644 --- a/frontend/src/pages/dev/SignupPage.vue +++ b/frontend/src/pages/dev/SignupPage.vue @@ -58,7 +58,7 @@