mirror of
https://github.com/Dvorinka/Productier.git
synced 2026-06-03 20:13:01 +00:00
166 lines
5.6 KiB
Go
166 lines
5.6 KiB
Go
package store
|
|
|
|
import "time"
|
|
|
|
// Contact represents a person in the CRM
|
|
type Contact struct {
|
|
ID string `json:"id"`
|
|
WorkspaceSlug string `json:"workspaceSlug"`
|
|
FirstName string `json:"firstName"`
|
|
LastName string `json:"lastName"`
|
|
Email string `json:"email"`
|
|
Phone string `json:"phone"`
|
|
CompanyID *string `json:"companyId,omitempty"`
|
|
CompanyName string `json:"companyName,omitempty"`
|
|
Title string `json:"title"`
|
|
Notes string `json:"notes"`
|
|
AvatarURL string `json:"avatarUrl"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
// Company represents an organization in the CRM
|
|
type Company struct {
|
|
ID string `json:"id"`
|
|
WorkspaceSlug string `json:"workspaceSlug"`
|
|
Name string `json:"name"`
|
|
Domain string `json:"domain"`
|
|
Website string `json:"website"`
|
|
Industry string `json:"industry"`
|
|
Size string `json:"size"`
|
|
Notes string `json:"notes"`
|
|
LogoURL string `json:"logoUrl"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
// ContactTaskLink links a contact to a task
|
|
type ContactTaskLink struct {
|
|
ID string `json:"id"`
|
|
ContactID string `json:"contactId"`
|
|
TaskID string `json:"taskId"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
// ContactEventLink links a contact to an event
|
|
type ContactEventLink struct {
|
|
ID string `json:"id"`
|
|
ContactID string `json:"contactId"`
|
|
EventID string `json:"eventId"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
// InboxItem represents a quick capture item
|
|
type InboxItem struct {
|
|
ID string `json:"id"`
|
|
WorkspaceSlug string `json:"workspaceSlug"`
|
|
Content string `json:"content"`
|
|
Source string `json:"source"`
|
|
Processed bool `json:"processed"`
|
|
ProcessedAt *time.Time `json:"processedAt,omitempty"`
|
|
ProcessedEntityType *string `json:"processedEntityType,omitempty"`
|
|
ProcessedEntityID *string `json:"processedEntityId,omitempty"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
// TimeEntry represents logged time
|
|
type TimeEntry struct {
|
|
ID string `json:"id"`
|
|
WorkspaceSlug string `json:"workspaceSlug"`
|
|
TaskID *string `json:"taskId,omitempty"`
|
|
Description string `json:"description"`
|
|
StartedAt time.Time `json:"startedAt"`
|
|
EndedAt *time.Time `json:"endedAt,omitempty"`
|
|
DurationSeconds int `json:"durationSeconds"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
// SavedView represents a user's saved filter/view
|
|
type SavedView struct {
|
|
ID string `json:"id"`
|
|
WorkspaceSlug string `json:"workspaceSlug"`
|
|
Name string `json:"name"`
|
|
EntityType string `json:"entityType"`
|
|
FilterJSON string `json:"filterJson"`
|
|
SortJSON string `json:"sortJson"`
|
|
IsDefault bool `json:"isDefault"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
// CreateContactInput for creating contacts
|
|
type CreateContactInput struct {
|
|
WorkspaceSlug string `json:"workspaceSlug" binding:"required"`
|
|
FirstName string `json:"firstName"`
|
|
LastName string `json:"lastName"`
|
|
Email string `json:"email"`
|
|
Phone string `json:"phone"`
|
|
CompanyID *string `json:"companyId"`
|
|
Title string `json:"title"`
|
|
Notes string `json:"notes"`
|
|
}
|
|
|
|
// UpdateContactInput for updating contacts
|
|
type UpdateContactInput struct {
|
|
FirstName *string `json:"firstName"`
|
|
LastName *string `json:"lastName"`
|
|
Email *string `json:"email"`
|
|
Phone *string `json:"phone"`
|
|
CompanyID *string `json:"companyId"`
|
|
Title *string `json:"title"`
|
|
Notes *string `json:"notes"`
|
|
}
|
|
|
|
// CreateCompanyInput for creating companies
|
|
type CreateCompanyInput struct {
|
|
WorkspaceSlug string `json:"workspaceSlug" binding:"required"`
|
|
Name string `json:"name" binding:"required"`
|
|
Domain string `json:"domain"`
|
|
Website string `json:"website"`
|
|
Industry string `json:"industry"`
|
|
Size string `json:"size"`
|
|
Notes string `json:"notes"`
|
|
}
|
|
|
|
// UpdateCompanyInput for updating companies
|
|
type UpdateCompanyInput struct {
|
|
Name *string `json:"name"`
|
|
Domain *string `json:"domain"`
|
|
Website *string `json:"website"`
|
|
Industry *string `json:"industry"`
|
|
Size *string `json:"size"`
|
|
Notes *string `json:"notes"`
|
|
}
|
|
|
|
// CreateInboxItemInput for quick capture
|
|
type CreateInboxItemInput struct {
|
|
WorkspaceSlug string `json:"workspaceSlug" binding:"required"`
|
|
Content string `json:"content" binding:"required"`
|
|
Source string `json:"source"`
|
|
}
|
|
|
|
// CreateTimeEntryInput for time tracking
|
|
type CreateTimeEntryInput struct {
|
|
WorkspaceSlug string `json:"workspaceSlug" binding:"required"`
|
|
TaskID *string `json:"taskId"`
|
|
Description string `json:"description"`
|
|
StartedAt time.Time `json:"startedAt" binding:"required"`
|
|
EndedAt *time.Time `json:"endedAt"`
|
|
}
|
|
|
|
// UpdateTimeEntryInput for updating time entries
|
|
type UpdateTimeEntryInput struct {
|
|
Description *string `json:"description"`
|
|
EndedAt *time.Time `json:"endedAt"`
|
|
}
|
|
|
|
// CreateSavedViewInput for saved views
|
|
type CreateSavedViewInput struct {
|
|
WorkspaceSlug string `json:"workspaceSlug" binding:"required"`
|
|
Name string `json:"name" binding:"required"`
|
|
EntityType string `json:"entityType" binding:"required"`
|
|
FilterJSON string `json:"filterJson"`
|
|
SortJSON string `json:"sortJson"`
|
|
IsDefault bool `json:"isDefault"`
|
|
} |