92 lines
3.3 KiB
Go
92 lines
3.3 KiB
Go
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"
|
|
)
|