This commit is contained in:
Alex Shevchuk
2025-08-18 17:12:04 +03:00
commit d84487d238
157 changed files with 160686 additions and 0 deletions

91
internal/feed/models.go Normal file
View File

@@ -0,0 +1,91 @@
package feed
import (
"database/sql"
"time"
)
type (
EventType string
UserRole string
Visibility string
)
const (
// User Roles
RoleAgent UserRole = "agent"
RoleDistributor UserRole = "distributor"
// Visibility Types
VisibilityPublic Visibility = "public" // Показывается всем агентам(инициатор может быть только дистр)
VisibilityPrivate Visibility = "private" // Показывается только инициатору события
VisibilityCompanyWide Visibility = "company_wide" // Показывается всем в компании
// Event Types (Common)
EventWelcome EventType = "welcome"
EventNewCompanyMember EventType = "new_company_member"
// Users Events
EventProfileChanged EventType = "profile_changed"
EventCompanyCreated EventType = "company_created"
EventCompanyChanged EventType = "company_changed"
EventVacancyCreated EventType = "vacancy_created"
EventVacancyChanged EventType = "vacancy_changed"
EventVacancyModerationSent EventType = "vacancy_moderation_sent"
EventSubmissionStatusChanged EventType = "submission_status_changed"
EventTransactionCreated EventType = "transaction_created"
EventBankAccountChanged EventType = "bank_details_changed"
EventBankAccountCreated EventType = "bank_account_created"
EventPostAnketa EventType = "post_anketa"
)
type Event struct {
Id string `json:"id" db:"id"`
OwnerId string `json:"owner_id" db:"owner_id"`
OwnerType UserRole `json:"owner_type" db:"owner_type"`
Message string `json:"message" db:"message"`
Visibility Visibility `json:"visibility" db:"visibility"`
CompanyID *string `json:"company_id,omitempty"`
EventType EventType `json:"event_type" db:"event_type"`
Payload EventPayload `json:"payload" db:"payload"`
IsCancelled bool `json:"is_cancelled" db:"is_cancelled"`
CancellationReason *string `json:"cancellation_reason" db:"cancellation_reason"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
}
func (e EventType) String() string {
return string(e)
}
func (u UserRole) String() string {
return string(u)
}
func (e *Event) processNullableFields(companyID, cancellationReason sql.NullString) {
if companyID.Valid {
e.CompanyID = &companyID.String
}
if cancellationReason.Valid {
e.CancellationReason = &cancellationReason.String
}
}
type EventPayload struct {
AttachmentId string `json:"attachment_id" db:"attachment_id"`
AttachmentType AttachmentType `json:"attachment_type" db:"attachment_type"`
AdditionalReceiver string `json:"additional_receiver,omitempty" db:"additional_receiver"` // may be uid or company id
CustomData string `json:"custom_data,omitempty"`
}
type AttachmentType string
const (
AttachmentTypeVacancy AttachmentType = "vacancy"
AttachmentTypeCV AttachmentType = "cv"
AttachmentTypeProfile AttachmentType = "profile"
AttachmentTypeCompany AttachmentType = "company"
AttachmentTypeBankAccount AttachmentType = "bank_account"
AttachmentTypeSubmission AttachmentType = "submission"
)