81a94b4879
continuous-integration/drone/push Build is passing
- Introduced `PickAssignedCompanyID` function to determine the appropriate company ID for company-scoped operations, improving company assignment logic. - Added `ResolveMongoID` method in the tender service to map MongoDB IDs and AI procedure references to canonical tender IDs, enhancing ID resolution. - Updated `ToggleTenderApproval` to handle company ID validation and improve error handling, ensuring robust processing of tender approvals. - Enhanced logging for error scenarios in the tender approval service, providing better insights into failures during operations. - Refactored the `GetByID` and `GetByTenderAndCompany` methods in the tender approval repository to utilize custom error types for improved clarity. This update significantly improves the handling of company and tender operations, enhancing error management and overall service reliability.
108 lines
5.4 KiB
Go
108 lines
5.4 KiB
Go
package tender_approval
|
|
|
|
// CreateTenderApprovalForm represents the form for creating a new tender approval
|
|
type CreateTenderApprovalForm struct {
|
|
TenderID string `json:"tender_id" valid:"required"`
|
|
SubmissionMode SubmissionMode `json:"submission_mode" valid:"required,in(self-apply|partnership)"`
|
|
Status ApprovalStatus `json:"status,omitempty" valid:"optional,in(submitted|rejected)"`
|
|
}
|
|
|
|
// UpdateTenderApprovalForm represents the form for updating a tender approval
|
|
type UpdateTenderApprovalForm struct {
|
|
SubmissionMode *string `json:"submission_mode,omitempty" valid:"optional,in(self-apply|partnership)"`
|
|
Status *string `json:"status,omitempty" valid:"optional,in(submitted|rejected)"`
|
|
}
|
|
|
|
// ListTenderApprovalsForm represents the form for listing tender approvals with filters
|
|
type ListTenderApprovalsForm struct {
|
|
TenderID *string `query:"tender_id" valid:"optional"`
|
|
CompanyID *string `query:"company_id" valid:"optional"`
|
|
Status []string `query:"status" valid:"optional"`
|
|
SubmissionMode []string `query:"submission_mode" valid:"optional"`
|
|
CreatedAtFrom *int64 `query:"created_at_from" valid:"optional"`
|
|
CreatedAtTo *int64 `query:"created_at_to" valid:"optional"`
|
|
Limit *int `query:"limit" valid:"optional,range(1|100)"`
|
|
Offset *int `query:"offset" valid:"optional,range(0|1000000)"`
|
|
SortBy *string `query:"sort_by" valid:"optional,in(created_at|updated_at|status|submission_mode)"`
|
|
SortOrder *string `query:"sort_order" valid:"optional,in(asc|desc)"`
|
|
}
|
|
|
|
// ApproveTenderForm represents the form for approving a tender
|
|
type ApproveTenderForm struct {
|
|
Notes *string `json:"notes,omitempty" valid:"optional,length(0|1000)"`
|
|
}
|
|
|
|
// RejectTenderForm represents the form for rejecting a tender
|
|
type RejectTenderForm struct {
|
|
Reason string `json:"reason" valid:"required,length(10|500)"`
|
|
}
|
|
|
|
// TenderApprovalListResponse represents the response for listing tender approvals
|
|
type TenderApprovalListResponse struct {
|
|
TenderApprovals []*TenderApprovalResponse `json:"tender_approvals"`
|
|
Total int64 `json:"total"`
|
|
Limit int `json:"limit"`
|
|
Offset int `json:"offset"`
|
|
TotalPages int `json:"total_pages"`
|
|
}
|
|
|
|
// TenderApproval search and matching DTOs
|
|
type TenderApprovalSearchForm struct {
|
|
Query *string `query:"q" valid:"optional"`
|
|
TenderID *string `query:"tender_id" valid:"optional"`
|
|
CompanyID *string `query:"company_id" valid:"optional"`
|
|
Status []string `query:"status" valid:"optional"`
|
|
SubmissionMode []string `query:"submission_mode" valid:"optional"`
|
|
CreatedAtFrom *int64 `query:"created_at_from" valid:"optional"`
|
|
CreatedAtTo *int64 `query:"created_at_to" valid:"optional"`
|
|
Limit *int `query:"limit" valid:"optional,range(1|100)"`
|
|
Offset *int `query:"offset" valid:"optional,range(0|1000000)"`
|
|
}
|
|
|
|
// TenderApproval statistics DTOs
|
|
type TenderApprovalStatsResponse struct {
|
|
TotalApprovals int64 `json:"total_approvals"`
|
|
SubmittedTenders int64 `json:"submitted_tenders"`
|
|
RejectedTenders int64 `json:"rejected_tenders"`
|
|
LastUpdated int64 `json:"last_updated"`
|
|
}
|
|
|
|
// CompanyTenderApprovalStatsResponse represents company-specific tender approval statistics
|
|
type CompanyTenderApprovalStatsResponse struct {
|
|
CompanyID string `json:"company_id"`
|
|
TotalApprovals int64 `json:"total_approvals"`
|
|
SubmittedTenders int64 `json:"submitted_tenders"`
|
|
RejectedTenders int64 `json:"rejected_tenders"`
|
|
SelfApplyCount int64 `json:"self_apply_count"`
|
|
PartnershipCount int64 `json:"partnership_count"`
|
|
LastUpdated int64 `json:"last_updated"`
|
|
}
|
|
|
|
// ToggleTenderApprovalForm represents the form for toggling a tender approval
|
|
type ToggleTenderApprovalForm struct {
|
|
TenderID string `json:"tender_id" valid:"required"`
|
|
CompanyID *string `json:"company_id,omitempty" valid:"optional"`
|
|
Status ApprovalStatus `json:"status" valid:"required,in(submitted|rejected)"`
|
|
SubmissionMode SubmissionMode `json:"submission_mode" valid:"required,in(self-apply|partnership)"`
|
|
}
|
|
|
|
// CompanyTenderApprovalStatsRequest represents a request for company tender approval statistics
|
|
type CompanyTenderApprovalStatsRequest struct {
|
|
CompanyIDs []string `query:"company_ids" valid:"optional"`
|
|
CompanyID *string `query:"company_id" valid:"optional"`
|
|
}
|
|
|
|
// AggregatedCompanyStatsResponse represents aggregated statistics across all companies
|
|
type AggregatedCompanyStatsResponse struct {
|
|
TotalCompanies int64 `json:"total_companies"`
|
|
TotalApprovals int64 `json:"total_approvals"`
|
|
TotalSubmittedTenders int64 `json:"total_submitted_tenders"`
|
|
TotalRejectedTenders int64 `json:"total_rejected_tenders"`
|
|
TotalSelfApplyCount int64 `json:"total_self_apply_count"`
|
|
TotalPartnershipCount int64 `json:"total_partnership_count"`
|
|
ApprovalsByStatus map[string]int64 `json:"approvals_by_status"`
|
|
ApprovalsBySubmission map[string]int64 `json:"approvals_by_submission"`
|
|
CompanyStats []*CompanyTenderApprovalStatsResponse `json:"company_stats"`
|
|
LastUpdated int64 `json:"last_updated"`
|
|
}
|