Initial commit: dating app backend (Go/Gin/GORM/Postgres)
Phone+OTP auth, staged onboarding, admin approval workflow, and a full discovery/swipe/match/chat system with photo upload and approximate distance (haversine) based on user location. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
package dto
|
||||
|
||||
// DiscoverCandidate یک پروفایل پیشنهادی توی صفحهی دوستیابی
|
||||
type DiscoverCandidate struct {
|
||||
ID uint `json:"id"`
|
||||
FirstName string `json:"first_name"`
|
||||
Age int `json:"age"`
|
||||
Photos []string `json:"photos"`
|
||||
DistanceKM *float64 `json:"distance_km,omitempty"`
|
||||
Interests []string `json:"interests,omitempty"`
|
||||
}
|
||||
|
||||
// SwipeRequest بدنهی درخواست ثبت لایک/ردّ
|
||||
type SwipeRequest struct {
|
||||
Action string `json:"action" binding:"required,oneof=like pass superlike"`
|
||||
}
|
||||
|
||||
// SwipeResponse نتیجهی یک سواپ؛ اگه Matched=true باشه یعنی مچ تازه (یا از قبل) ساخته شده
|
||||
type SwipeResponse struct {
|
||||
Matched bool `json:"matched"`
|
||||
Match *MatchView `json:"match,omitempty"`
|
||||
}
|
||||
|
||||
// MatchView خلاصهی یک مچ برای نمایش در لیست مچها/گفتگوها
|
||||
type MatchView struct {
|
||||
ID uint `json:"id"`
|
||||
UserID uint `json:"user_id"`
|
||||
FirstName string `json:"first_name"`
|
||||
Photos []string `json:"photos"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
LastMessage *string `json:"last_message,omitempty"`
|
||||
LastAt *string `json:"last_at,omitempty"`
|
||||
}
|
||||
|
||||
// MessageView یک پیام در یک گفتگو
|
||||
type MessageView struct {
|
||||
ID uint `json:"id"`
|
||||
MatchID uint `json:"match_id"`
|
||||
SenderID uint `json:"sender_id"`
|
||||
Text string `json:"text"`
|
||||
CreatedAt string `json:"created_at"`
|
||||
IsMine bool `json:"is_mine"`
|
||||
}
|
||||
|
||||
// SendMessageRequest بدنهی درخواست ارسال پیام
|
||||
type SendMessageRequest struct {
|
||||
Text string `json:"text" binding:"required,min=1,max=2000"`
|
||||
}
|
||||
|
||||
// CandidateAnswer پاسخ یک سوال پروفایل، برای نمایش عمومی
|
||||
type CandidateAnswer struct {
|
||||
Question string `json:"question"`
|
||||
Answer string `json:"answer"`
|
||||
}
|
||||
|
||||
// CandidateDetail پروفایل کامل یک کاربر دیگه (برای نمایش صفحهی جزئیات پروفایل)
|
||||
type CandidateDetail struct {
|
||||
ID uint `json:"id"`
|
||||
FirstName string `json:"first_name"`
|
||||
Age int `json:"age"`
|
||||
Photos []string `json:"photos"`
|
||||
DistanceKM *float64 `json:"distance_km,omitempty"`
|
||||
HeightCM *int `json:"height_cm,omitempty"`
|
||||
WeightKG *int `json:"weight_kg,omitempty"`
|
||||
Education string `json:"education,omitempty"`
|
||||
FieldOfStudy string `json:"field_of_study,omitempty"`
|
||||
Occupations []string `json:"occupations,omitempty"`
|
||||
Interests []string `json:"interests,omitempty"`
|
||||
ImportantInRelationship []string `json:"important_in_relationship,omitempty"`
|
||||
LookingFor string `json:"looking_for,omitempty"`
|
||||
Answers []CandidateAnswer `json:"profile_answers,omitempty"`
|
||||
}
|
||||
Reference in New Issue
Block a user