package common import "github.com/google/uuid" // Common Response Types type ErrorResponse struct { Error string `json:"error"` } type MessageResponse struct { Message string `json:"message"` } // Auth Requests/Responses type AuthLoginRequest struct { Email string `json:"email" binding:"required,email"` Password string `json:"password" binding:"required,password"` } type AuthLoginResponse struct { Token string `json:"token"` User User `json:"user"` } // User Requests/Responses type UserCreateRequest struct { Email string `json:"email" binding:"required,email"` Name string `json:"name" binding:"required,min=2,max=100"` PhoneNumber string `json:"phone_number" binding:"omitempty,phone"` Password string `json:"password" binding:"required,password"` } type UserCreateResponse struct { User User `json:"user"` } type UserUpdateRequest struct { Name string `json:"name" binding:"required,min=2,max=100"` PhoneNumber string `json:"phone_number" binding:"omitempty,phone"` } type UserUpdateResponse struct { User User `json:"user"` } type UserResponse struct { User User `json:"user"` Workspaces []Workspace `json:"workspaces"` } // Workspace Requests/Responses type WorkspaceCreateRequest struct { Name string `json:"name" binding:"required,min=2,max=100"` } type WorkspaceCreateResponse struct { ID uuid.UUID `json:"id"` Name string `json:"name"` } type WorkspaceResponse struct { Workspace Workspace `json:"workspace"` } type WorkspaceListResponse struct { Workspaces []Workspace `json:"workspaces"` } type WorkspaceOwnerInitRequest struct { Email string `json:"email" binding:"required,email"` Name string `json:"name" binding:"required,min=2,max=100"` PhoneNumber string `json:"phone_number" binding:"omitempty,phone"` } type WorkspaceOwnerInitResponse struct { User User `json:"user"` } type WorkspaceOwnerCreateRequest struct { Email string `json:"email" binding:"required,email"` Name string `json:"name" binding:"required,min=2,max=100"` PhoneNumber string `json:"phone_number" binding:"omitempty,phone"` Password string `json:"password" binding:"required,password"` } type WorkspaceOwnerCreateResponse struct { User User `json:"user"` } type WorkspaceMemberAddRequest struct { WorkspaceID uuid.UUID `json:"workspace_id" binding:"required,uuid"` Role string `json:"role" binding:"required,oneof=admin member"` } type WorkspaceMemberAddResponse struct { Message string `json:"message"` } // Profile Requests/Responses type ProfileCreateRequest struct { Name string `json:"name" binding:"required,min=2,max=100"` WorkspaceID uuid.UUID `json:"workspace_id" binding:"required,uuid"` } type ProfileCreateResponse struct { Profile Profile `json:"profile"` } type ProfileUpdateRequest struct { Name string `json:"name" binding:"required,min=2,max=100"` } type ProfileUpdateResponse struct { Profile Profile `json:"profile"` } type ProfileResponse struct { Profile Profile `json:"profile"` } type ProfileListResponse struct { Profiles []Profile `json:"profiles"` } // Invitation Requests/Responses type InvitationCreateRequest struct { Email string `json:"email" binding:"required,email"` WorkspaceID uuid.UUID `json:"workspace_id" binding:"required,uuid"` Role string `json:"role" binding:"required,oneof=admin member"` } type InvitationCreateResponse struct { ID uuid.UUID `json:"id"` Email string `json:"email"` Status string `json:"status"` ExpiresAt string `json:"expires_at"` WorkspaceID uuid.UUID `json:"workspace_id"` } type InvitationAcceptRequest struct { Email string `json:"email" binding:"required,email"` Name string `json:"name" binding:"required,min=2,max=100"` PhoneNumber string `json:"phone_number" binding:"omitempty,phone"` Password string `json:"password" binding:"required,password"` Token string `json:"token" binding:"required"` } type InvitationAcceptResponse struct { User User `json:"user"` WorkspaceID uuid.UUID `json:"workspace_id"` } type InvitationValidateResponse struct { Valid bool `json:"valid"` WorkspaceID uuid.UUID `json:"workspace_id"` Email string `json:"email"` Error string `json:"error,omitempty"` } type InvitationListResponse struct { Invitations []Invite `json:"invitations"` }