213 lines
9.1 KiB
Go
213 lines
9.1 KiB
Go
package contract
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type CreateOutgoingLetterRecipient struct {
|
|
Name string `json:"name" validate:"required"`
|
|
Email *string `json:"email,omitempty"`
|
|
Position *string `json:"position,omitempty"`
|
|
Institution *string `json:"institution,omitempty"`
|
|
IsPrimary bool `json:"is_primary"`
|
|
}
|
|
|
|
type CreateOutgoingLetterAttachment struct {
|
|
FileURL string `json:"file_url" validate:"required"`
|
|
FileName string `json:"file_name" validate:"required"`
|
|
FileType string `json:"file_type" validate:"required"`
|
|
}
|
|
|
|
type CreateOutgoingLetterRequest struct {
|
|
ReferenceNumber *string `json:"reference_number,omitempty"`
|
|
Subject string `json:"subject" validate:"required"`
|
|
Description *string `json:"description,omitempty"`
|
|
PriorityID *uuid.UUID `json:"priority_id,omitempty"`
|
|
ReceiverInstitutionID *uuid.UUID `json:"receiver_institution_id,omitempty"`
|
|
IssueDate time.Time `json:"issue_date" validate:"required"`
|
|
ApprovalFlowID *uuid.UUID `json:"approval_flow_id,omitempty"`
|
|
Recipients []CreateOutgoingLetterRecipient `json:"recipients,omitempty"`
|
|
Attachments []CreateOutgoingLetterAttachment `json:"attachments,omitempty"`
|
|
}
|
|
|
|
type OutgoingLetterRecipientResponse struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Name string `json:"name"`
|
|
Email *string `json:"email,omitempty"`
|
|
Position *string `json:"position,omitempty"`
|
|
Institution *string `json:"institution,omitempty"`
|
|
IsPrimary bool `json:"is_primary"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type OutgoingLetterAttachmentResponse struct {
|
|
ID uuid.UUID `json:"id"`
|
|
FileURL string `json:"file_url"`
|
|
FileName string `json:"file_name"`
|
|
FileType string `json:"file_type"`
|
|
UploadedAt time.Time `json:"uploaded_at"`
|
|
}
|
|
|
|
type OutgoingLetterApprovalResponse struct {
|
|
ID uuid.UUID `json:"id"`
|
|
StepOrder int `json:"step_order"`
|
|
ApproverID *uuid.UUID `json:"approver_id,omitempty"`
|
|
Status string `json:"status"`
|
|
Remarks *string `json:"remarks,omitempty"`
|
|
ActedAt *time.Time `json:"acted_at,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type OutgoingLetterResponse struct {
|
|
ID uuid.UUID `json:"id"`
|
|
LetterNumber string `json:"letter_number"`
|
|
ReferenceNumber *string `json:"reference_number,omitempty"`
|
|
Subject string `json:"subject"`
|
|
Description *string `json:"description,omitempty"`
|
|
PriorityID *uuid.UUID `json:"priority_id,omitempty"`
|
|
Priority *PriorityResponse `json:"priority,omitempty"`
|
|
ReceiverInstitutionID *uuid.UUID `json:"receiver_institution_id,omitempty"`
|
|
ReceiverInstitution *InstitutionResponse `json:"receiver_institution,omitempty"`
|
|
IssueDate time.Time `json:"issue_date"`
|
|
Status string `json:"status"`
|
|
ApprovalFlowID *uuid.UUID `json:"approval_flow_id,omitempty"`
|
|
CreatedBy uuid.UUID `json:"created_by"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
Recipients []OutgoingLetterRecipientResponse `json:"recipients,omitempty"`
|
|
Attachments []OutgoingLetterAttachmentResponse `json:"attachments,omitempty"`
|
|
Approvals []OutgoingLetterApprovalResponse `json:"approvals,omitempty"`
|
|
}
|
|
|
|
type UpdateOutgoingLetterRequest struct {
|
|
ReferenceNumber *string `json:"reference_number,omitempty"`
|
|
Subject *string `json:"subject,omitempty"`
|
|
Description *string `json:"description,omitempty"`
|
|
PriorityID *uuid.UUID `json:"priority_id,omitempty"`
|
|
ReceiverInstitutionID *uuid.UUID `json:"receiver_institution_id,omitempty"`
|
|
IssueDate *time.Time `json:"issue_date,omitempty"`
|
|
}
|
|
|
|
type ListOutgoingLettersRequest struct {
|
|
Limit int `json:"limit"`
|
|
Offset int `json:"offset"`
|
|
Status *string `json:"status,omitempty"`
|
|
Query *string `json:"query,omitempty"`
|
|
CreatedBy *uuid.UUID `json:"created_by,omitempty"`
|
|
ReceiverInstitutionID *uuid.UUID `json:"receiver_institution_id,omitempty"`
|
|
FromDate *time.Time `json:"from_date,omitempty"`
|
|
ToDate *time.Time `json:"to_date,omitempty"`
|
|
}
|
|
|
|
type ListOutgoingLettersResponse struct {
|
|
Items []*OutgoingLetterResponse `json:"items"`
|
|
Total int64 `json:"total"`
|
|
}
|
|
|
|
type ApproveLetterRequest struct {
|
|
Remarks *string `json:"remarks,omitempty"`
|
|
}
|
|
|
|
type RejectLetterRequest struct {
|
|
Reason string `json:"reason" validate:"required"`
|
|
}
|
|
|
|
type AddRecipientsRequest struct {
|
|
Recipients []CreateOutgoingLetterRecipient `json:"recipients" validate:"required,dive"`
|
|
}
|
|
|
|
type UpdateRecipientRequest struct {
|
|
Name string `json:"name" validate:"required"`
|
|
Email *string `json:"email,omitempty"`
|
|
Position *string `json:"position,omitempty"`
|
|
Institution *string `json:"institution,omitempty"`
|
|
IsPrimary bool `json:"is_primary"`
|
|
}
|
|
|
|
type AddAttachmentsRequest struct {
|
|
Attachments []CreateOutgoingLetterAttachment `json:"attachments" validate:"required,dive"`
|
|
}
|
|
|
|
type CreateDiscussionAttachment struct {
|
|
FileURL string `json:"file_url" validate:"required"`
|
|
FileName string `json:"file_name" validate:"required"`
|
|
FileType string `json:"file_type" validate:"required"`
|
|
}
|
|
|
|
type CreateDiscussionRequest struct {
|
|
ParentID *uuid.UUID `json:"parent_id,omitempty"`
|
|
Message string `json:"message" validate:"required"`
|
|
Mentions map[string]interface{} `json:"mentions,omitempty"`
|
|
Attachments []CreateDiscussionAttachment `json:"attachments,omitempty"`
|
|
}
|
|
|
|
type UpdateDiscussionRequest struct {
|
|
Message string `json:"message" validate:"required"`
|
|
Mentions map[string]interface{} `json:"mentions,omitempty"`
|
|
}
|
|
|
|
type DiscussionResponse struct {
|
|
ID uuid.UUID `json:"id"`
|
|
ParentID *uuid.UUID `json:"parent_id,omitempty"`
|
|
UserID uuid.UUID `json:"user_id"`
|
|
Message string `json:"message"`
|
|
Mentions map[string]interface{} `json:"mentions,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
EditedAt *time.Time `json:"edited_at,omitempty"`
|
|
}
|
|
|
|
type ApprovalFlowRequest struct {
|
|
DepartmentID uuid.UUID `json:"department_id" validate:"required"`
|
|
Name string `json:"name" validate:"required"`
|
|
Description *string `json:"description,omitempty"`
|
|
IsActive bool `json:"is_active"`
|
|
Steps []ApprovalFlowStepRequest `json:"steps" validate:"required,dive"`
|
|
}
|
|
|
|
type ApprovalFlowStepRequest struct {
|
|
StepOrder int `json:"step_order" validate:"required,min=1"`
|
|
ParallelGroup int `json:"parallel_group" validate:"min=1"`
|
|
ApproverRoleID *uuid.UUID `json:"approver_role_id,omitempty"`
|
|
ApproverUserID *uuid.UUID `json:"approver_user_id,omitempty"`
|
|
Required bool `json:"required"`
|
|
}
|
|
|
|
type ApprovalFlowResponse struct {
|
|
ID uuid.UUID `json:"id"`
|
|
DepartmentID uuid.UUID `json:"department_id"`
|
|
Department *DepartmentResponse `json:"department,omitempty"`
|
|
Name string `json:"name"`
|
|
Description *string `json:"description,omitempty"`
|
|
IsActive bool `json:"is_active"`
|
|
Steps []ApprovalFlowStepResponse `json:"steps,omitempty"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
type ApprovalFlowStepResponse struct {
|
|
ID uuid.UUID `json:"id"`
|
|
StepOrder int `json:"step_order"`
|
|
ParallelGroup int `json:"parallel_group"`
|
|
ApproverRoleID *uuid.UUID `json:"approver_role_id,omitempty"`
|
|
ApproverRole *RoleResponse `json:"approver_role,omitempty"`
|
|
ApproverUserID *uuid.UUID `json:"approver_user_id,omitempty"`
|
|
ApproverUser *UserResponse `json:"approver_user,omitempty"`
|
|
Required bool `json:"required"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
type ListApprovalFlowsRequest struct {
|
|
Limit int `json:"limit"`
|
|
Offset int `json:"offset"`
|
|
DepartmentID *uuid.UUID `json:"department_id,omitempty"`
|
|
IsActive *bool `json:"is_active,omitempty"`
|
|
}
|
|
|
|
type ListApprovalFlowsResponse struct {
|
|
Items []*ApprovalFlowResponse `json:"items"`
|
|
Total int64 `json:"total"`
|
|
} |