user.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package models
  2. import (
  3. "time"
  4. )
  5. // User represents the user account model
  6. type User struct {
  7. ID string `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id"`
  8. Username string `gorm:"uniqueIndex;not null;size:50" json:"username"`
  9. Email *string `gorm:"uniqueIndex;size:100" json:"email,omitempty"`
  10. PhoneNumber *string `gorm:"uniqueIndex;size:20" json:"phoneNumber,omitempty"`
  11. PasswordHash string `gorm:"column:password_hash;not null" json:"-"`
  12. AvatarURL *string `gorm:"size:500" json:"avatarURL,omitempty"`
  13. RegisteredAt time.Time `gorm:"autoCreateTime" json:"registeredAt"`
  14. UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updatedAt"`
  15. }
  16. // RegisterRequest DTO
  17. type RegisterRequest struct {
  18. Username string `json:"username" binding:"required,min=2"`
  19. Identifier string `json:"identifier" binding:"required"` // email or phone
  20. Password string `json:"password" binding:"required,min=6"`
  21. }
  22. // LoginRequest DTO
  23. type LoginRequest struct {
  24. Identifier string `json:"identifier" binding:"required"`
  25. Password string `json:"password" binding:"required"`
  26. }
  27. // UpdateProfileRequest DTO
  28. type UpdateProfileRequest struct {
  29. Username *string `json:"username,omitempty"`
  30. Email *string `json:"email,omitempty"`
  31. PhoneNumber *string `json:"phoneNumber,omitempty"`
  32. AvatarURL *string `json:"avatarURL,omitempty"`
  33. }
  34. // ChangePasswordRequest DTO
  35. type ChangePasswordRequest struct {
  36. OldPassword string `json:"oldPassword" binding:"required"`
  37. NewPassword string `json:"newPassword" binding:"required,min=6"`
  38. }
  39. // AuthResponse DTO
  40. type AuthResponse struct {
  41. User User `json:"user"`
  42. Token string `json:"token"`
  43. }
  44. // ErrorResponse DTO
  45. type ErrorResponse struct {
  46. Code int `json:"code"`
  47. Message string `json:"message"`
  48. }