initial commit
This commit is contained in:
157
internal/dto/overview.go
Normal file
157
internal/dto/overview.go
Normal file
@@ -0,0 +1,157 @@
|
||||
package dto
|
||||
|
||||
import "time"
|
||||
|
||||
// OverviewResponse is the dashboard response for authenticated users with a profile
|
||||
type OverviewResponse struct {
|
||||
Message string `json:"message"`
|
||||
Data OverviewDataDTO `json:"data"`
|
||||
}
|
||||
|
||||
type OverviewDataDTO struct {
|
||||
Analytics AnalyticsDTO `json:"analytics"`
|
||||
RecentlyJoined []FlatProfileDTO `json:"recently_joined"`
|
||||
Assets []AssetResponse `json:"assets"`
|
||||
CompletionPercent int `json:"completionPercent"`
|
||||
Tasks TasksDTO `json:"tasks"`
|
||||
}
|
||||
|
||||
// OverviewFetchedResponse matches "Overview fetched successfully" format (assets with content, cover_image, etc.)
|
||||
type OverviewFetchedResponse struct {
|
||||
Message string `json:"message"`
|
||||
Data OverviewFetchedDataDTO `json:"data"`
|
||||
}
|
||||
|
||||
type OverviewFetchedDataDTO struct {
|
||||
Assets []OverviewAssetDTO `json:"assets"`
|
||||
RecentlyJoined []FlatProfileDTO `json:"recently_joined"`
|
||||
Analytics AnalyticsDTO `json:"analytics"`
|
||||
}
|
||||
|
||||
// SpecialistOverviewFetchedDataDTO extends OverviewFetchedDataDTO with specialist's Profile, Skills, completionPercent, and tasks
|
||||
type SpecialistOverviewFetchedDataDTO struct {
|
||||
Assets []OverviewAssetDTO `json:"assets"`
|
||||
RecentlyJoined []FlatProfileDTO `json:"recently_joined"`
|
||||
Analytics AnalyticsDTO `json:"analytics"`
|
||||
Profile *ProfileResponse `json:"profile,omitempty"`
|
||||
Skills []SkillDTO `json:"skills,omitempty"`
|
||||
CompletionPercent int `json:"completionPercent"`
|
||||
Tasks TasksDTO `json:"tasks"`
|
||||
}
|
||||
|
||||
// SpecialistOverviewFetchedResponse is the specialist overview response (includes Profile + Skills)
|
||||
type SpecialistOverviewFetchedResponse struct {
|
||||
Message string `json:"message"`
|
||||
Data SpecialistOverviewFetchedDataDTO `json:"data"`
|
||||
}
|
||||
|
||||
// OverviewAssetDTO is the full asset format for overview (content, cover_image, price, etc.)
|
||||
type OverviewAssetDTO struct {
|
||||
ID string `json:"id"`
|
||||
Title string `json:"title"`
|
||||
Description string `json:"description"`
|
||||
Content string `json:"content"`
|
||||
AssetCategoryID string `json:"asset_category_id"`
|
||||
AssetCategory *CategoryDTO `json:"asset_category"`
|
||||
CoverImage string `json:"cover_image"`
|
||||
Link string `json:"link"`
|
||||
OwnerID string `json:"owner_id"`
|
||||
ProfileID string `json:"profile_id"`
|
||||
Profile interface{} `json:"profile"`
|
||||
Price int `json:"price"`
|
||||
Currency string `json:"currency"`
|
||||
Status string `json:"status"`
|
||||
Rating int `json:"rating"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
type AnalyticsDTO struct {
|
||||
TotalAssets int `json:"total_assets"`
|
||||
TotalProfiles int `json:"total_profiles"`
|
||||
}
|
||||
|
||||
// CategoryAssetsDTO groups assets under a category for discovery.
|
||||
type CategoryAssetsDTO struct {
|
||||
Category CategoryDTO `json:"category"`
|
||||
Assets []OverviewAssetDTO `json:"assets"`
|
||||
}
|
||||
|
||||
// CategoryAssetsPaginatedDTO groups paginated assets under a category.
|
||||
type CategoryAssetsPaginatedDTO struct {
|
||||
Category CategoryDTO `json:"category"`
|
||||
Assets []OverviewAssetDTO `json:"assets"`
|
||||
Total int `json:"total"`
|
||||
Page int `json:"page"`
|
||||
PageSize int `json:"page_size"`
|
||||
TotalPages int `json:"total_pages"`
|
||||
}
|
||||
|
||||
// ListAssetsByCategoryResponse is the paginated API response for assets by category.
|
||||
type ListAssetsByCategoryResponse struct {
|
||||
Data ListAssetsByCategoryResponseData `json:"data"`
|
||||
}
|
||||
|
||||
// ListAssetsByCategoryResponseData holds the categories with paginated assets.
|
||||
type ListAssetsByCategoryResponseData struct {
|
||||
Categories []CategoryAssetsPaginatedDTO `json:"categories"`
|
||||
}
|
||||
|
||||
// AssetsByCategoryResponse is the API response for assets grouped by category (at least 6 per category).
|
||||
type AssetsByCategoryResponse struct {
|
||||
Message string `json:"message"`
|
||||
Data AssetsByCategoryResponseData `json:"data"`
|
||||
}
|
||||
|
||||
type AssetsByCategoryResponseData struct {
|
||||
Categories map[string]CategoryAssetsDTO `json:"categories"`
|
||||
}
|
||||
|
||||
type TasksDTO struct {
|
||||
ProfileAction bool `json:"profile_action"`
|
||||
AboutAction bool `json:"about_action"`
|
||||
PublishAction bool `json:"publish_action"`
|
||||
WorksAction bool `json:"works_action"`
|
||||
SkillsAction bool `json:"skills_action"`
|
||||
SocialAction bool `json:"social_action"`
|
||||
}
|
||||
|
||||
// FlatProfileDTO is the flat profile format for recently_joined and similar lists
|
||||
type FlatProfileDTO struct {
|
||||
ID string `json:"id"`
|
||||
ProfileHandle string `json:"profile_handle"`
|
||||
Status string `json:"status"`
|
||||
BackgroundImage string `json:"background_image"`
|
||||
ProfilePicture string `json:"profile_picture"`
|
||||
FirstName string `json:"first_name"`
|
||||
LastName string `json:"last_name"`
|
||||
DisplayName string `json:"display_name"`
|
||||
RoleID string `json:"role_id"`
|
||||
Role RoleDTO `json:"role"`
|
||||
CurrentCompany string `json:"current_company"`
|
||||
ShortDescription string `json:"short_description"`
|
||||
CTAEnabled bool `json:"cta_enabled"`
|
||||
CTAAction string `json:"cta_action"`
|
||||
ResumeLink string `json:"resume_link"`
|
||||
About string `json:"about"`
|
||||
ContactEmail string `json:"contact_email"`
|
||||
Achievements map[string]AchievementItemDTO `json:"achievements"`
|
||||
ContactPhone string `json:"contact_phone"`
|
||||
Country string `json:"country"`
|
||||
CustomRoles string `json:"custom_roles"`
|
||||
RoleLevel string `json:"role_level"`
|
||||
SocialLinks []SocialLinkDTO `json:"social_links"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
HandleUpdatedAt time.Time `json:"handle_updated_at"`
|
||||
}
|
||||
|
||||
type RoleDTO struct {
|
||||
ID string `json:"ID"`
|
||||
Name string `json:"Name"`
|
||||
}
|
||||
|
||||
type AchievementItemDTO struct {
|
||||
Value string `json:"value"`
|
||||
Enabled bool `json:"enabled"`
|
||||
}
|
||||
Reference in New Issue
Block a user