matching_app/docs/schema.md
2025-05-02 15:12:18 +07:00

6.2 KiB

FORMAT

Title: Database Schema

Database Type: PostgreSQL

Core Entities

Profile

  • Description: Lưu thông tin người tham gia
  • Fields:
    • id (UUID, PRIMARY KEY): Unique identifier
    • fullName (TEXT): Tên đầy đủ người dùng
    • dateOfBirth (DATE): Ngày sinh
    • gender (TEXT): Giới tính
    • preferredGender (TEXT): Giới tính mong muốn
    • phoneNumber (TEXT): Số điện thoại
    • email (TEXT): Email
    • facebookLink (TEXT): Link Facebook
    • photoReference (TEXT): Reference to stored photo
    • location (TEXT): Khu vực
    • team (TEXT): Team choice
    • hobbies (TEXT[]): Sở thích
    • thingsNotTried (TEXT): Thứ chưa thử qua
    • hopesForPartner (TEXT): Mong muốn đối với đối tác
    • dealbreakers (TEXT): Ranh giới
    • messageToPartner (TEXT): Thông điệp gửi đối tác
    • zodiacSign (TEXT): Cung hoàng đạo
    • accessCode (TEXT): Code truy cập kết quả
    • personalLink (TEXT): Link cá nhân
    • acceptedTerms (BOOLEAN): Chấp nhận điều khoản
    • registrationTimestamp (TIMESTAMP): Thời điểm đăng ký
    • status (TEXT): Trạng thái
    • isLuckyWinner (BOOLEAN): Có trúng thưởng
    • createdAt (TIMESTAMP): Thời điểm tạo
    • updatedAt (TIMESTAMP): Thời điểm cập nhật

MatchOutcome

  • Description: Lưu kết quả matching cho một Profile
  • Fields:
    • id (UUID, PRIMARY KEY): Unique identifier
    • profileId (UUID, FK): ID hồ sơ
    • potentialMatchProfileIds (UUID[]): Danh sách ID 3 đối tượng phù hợp
    • matchScores (JSON): Điểm match
    • status (TEXT): Trạng thái
    • selectedProfileId (UUID): ID hồ sơ được chọn
    • generationTimestamp (TIMESTAMP): Thời điểm tạo kết quả
    • accessedTimestamp (TIMESTAMP): Thời điểm truy cập
    • selectionTimestamp (TIMESTAMP): Thời điểm chọn
    • createdAt (TIMESTAMP): Thời điểm tạo
    • updatedAt (TIMESTAMP): Thời điểm cập nhật

GiftAllocation

  • Description: Ghi nhận việc phân bổ quà tặng
  • Fields:
    • id (UUID, PRIMARY KEY): Unique identifier
    • profileId (UUID, FK): ID hồ sơ
    • giftId (UUID, FK): ID quà
    • allocationTimestamp (TIMESTAMP): Thời điểm phân bổ
    • notificationStatus (TEXT): Trạng thái thông báo
    • notificationSentTimestamp (TIMESTAMP): Thời điểm gửi thông báo
    • createdAt (TIMESTAMP): Thời điểm tạo
    • updatedAt (TIMESTAMP): Thời điểm cập nhật

Gift

  • Description: Lưu thông tin các loại quà tặng
  • Fields:
    • id (UUID, PRIMARY KEY): Unique identifier
    • name (TEXT): Tên quà
    • description (TEXT): Mô tả
    • imageUrl (TEXT): URL hình ảnh
    • isActive (BOOLEAN): Trạng thái hoạt động
    • createdAt (TIMESTAMP): Thời điểm tạo
    • updatedAt (TIMESTAMP): Thời điểm cập nhật

Indexes

  • profiles_email_idx: Index trên trường email của Profile
  • profiles_access_code_idx: Index trên trường accessCode của Profile
  • match_outcomes_profile_id_idx: Index trên trường profileId của MatchOutcome

DATA SCHEMA AND STRUCTURES

1. Database Schema

Table: [Table Name]

Description: [Brief description of the table's purpose]

Columns:

  • [Column Name] ([Data Type]): [Brief description]. Constraints: [Constraint(s)]. [PK/FK (references Table(Column))] [Index (Type)]

Relationships:

  • [Table Name] [Relationship Type] [Another Table Name] (on [Column Name] -> [Another Table Name].[Column Name])

Indexes:

  • [Index Name] on [Column(s)] ([Index Type])

2. Generic Data Declarations

2.1. [Data Structure Name]

Description: [Brief description of the purpose of this data structure.]

Fields:

  • [Field Name] ([Data Type]): [Brief description of the field]. [Constraints/Rules]

Example (Optional):

{
  "[field name]": "[example value]",
  "[another field]": "[example value]"
}

3. Application-Specific Data Structures

3.1. Profile Aggregate

Description: Aggregate for storing user profile information.

Fields:

type Profile struct {
    ID                   string
    FullName             string
    DateOfBirth          time.Time
    Gender               string
    PreferredGender      string
    PhoneNumber          string
    Email                string
    FacebookLink         string
    PhotoReference       string
    Location             string
    Team                 string
    Hobbies              []string
    ThingsNotTried       []string
    HopesForPartner      string
    Dealbreakers         string
    MessageToPartner     string
    ZodiacSign           string
    AccessCode           string
    PersonalLink         string
    AcceptedTerms        bool
    RegistrationTimestamp time.Time
    Status               string
    IsLuckyWinner        bool
    CreatedAt            time.Time
    UpdatedAt            time.Time
}

3.2. MatchOutcome Aggregate

Description: Aggregate for storing match outcome information.

Fields:

type MatchOutcome struct {
    ID                  string
    ProfileID           string
    PotentialMatchProfileIDs []string
    MatchScores         map[string]float64 // Optional
    Status              string
    SelectedProfileID   string
    GenerationTimestamp time.Time
    AccessedTimestamp   time.Time
    SelectionTimestamp  time.Time
    CreatedAt           time.Time
    UpdatedAt           time.Time
}

3.3. GiftAllocation Aggregate

Description: Aggregate for storing gift allocation information.

Fields:

type GiftAllocation struct {
    ID                    string
    ProfileID             string
    GiftID                string
    AllocationTimestamp   time.Time
    NotificationStatus    string
    NotificationSentTimestamp time.Time
    CreatedAt             time.Time
    UpdatedAt             time.Time
}

3.4. Gift Aggregate

Description: Aggregate for storing gift information.

Fields:

type Gift struct {
    ID          string
    Name        string
    Description string
    ImageURL    string // Optional
    IsActive    bool
    CreatedAt   time.Time
    UpdatedAt   time.Time
}