mirror of
https://github.com/hazemKrimi/crimson-vault.git
synced 2026-05-01 18:20:27 +00:00
108 lines
2.9 KiB
Go
108 lines
2.9 KiB
Go
package types
|
|
|
|
import (
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type ItemType int
|
|
|
|
const (
|
|
Service ItemType = iota
|
|
Product
|
|
)
|
|
|
|
func (itemType ItemType) String() string {
|
|
switch itemType {
|
|
case Service:
|
|
return "service"
|
|
case Product:
|
|
return "product"
|
|
default:
|
|
return "unknown"
|
|
}
|
|
}
|
|
|
|
type Item struct {
|
|
ID string `json:"id" gorm:"type:varchar(255);primaryKey"`
|
|
InvoiceID string `json:"invoiceId" gorm:"type:varchar(255)"`
|
|
UserID string `json:"userId" gorm:"type:varchar(255)"`
|
|
Name string `json:"name"`
|
|
Type string `json:"type"`
|
|
Price uint32 `json:"price"`
|
|
Quantity uint32 `json:"quantity"`
|
|
Tax uint32 `json:"tax"`
|
|
}
|
|
|
|
type Status int
|
|
|
|
const (
|
|
Draft Status = iota
|
|
Posted
|
|
Paid
|
|
Late
|
|
)
|
|
|
|
func (status Status) String() string {
|
|
switch status {
|
|
case Draft:
|
|
return "draft"
|
|
case Posted:
|
|
return "posted"
|
|
case Paid:
|
|
return "paid"
|
|
case Late:
|
|
return "late"
|
|
default:
|
|
return "unknown"
|
|
}
|
|
}
|
|
|
|
type Invoice struct {
|
|
ID string `json:"id" gorm:"type:varchar(255);primaryKey"`
|
|
UserID string `json:"userId" gorm:"type:varchar(255)"`
|
|
ClientID string `json:"clientId" gorm:"type:varchar(255)"`
|
|
CreatedAt time.Time `json:"createAt"`
|
|
DueAt time.Time `json:"dueAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
DeletedAt gorm.DeletedAt `json:"deletedAt" gorm:"index"`
|
|
Reference string `json:"reference"`
|
|
Status string `json:"status"`
|
|
PDF string `json:"pdf"`
|
|
Currency string `json:"currency"`
|
|
VAT uint32 `json:"vat"`
|
|
Items []Item `json:"items"`
|
|
}
|
|
|
|
type CreateItemRequestBody struct {
|
|
Name string `json:"name" validate:"alpha,required"`
|
|
Type string `json:"type" validate:"alpha,required"`
|
|
Quantity uint32 `json:"quantity" validate:"number,required"`
|
|
Price uint32 `json:"price" validate:"number,required"`
|
|
Tax uint32 `json:"tax" validate:"number,omitempty"`
|
|
}
|
|
|
|
type UpdateItemRequestBody struct {
|
|
Name string `json:"name" validate:"alpha,omitempty"`
|
|
Type string `json:"type" validate:"alpha,omitempty"`
|
|
Quantity uint32 `json:"quantity" validate:"number,omitempty"`
|
|
Price uint32 `json:"price" validate:"number,omitempty"`
|
|
Tax uint32 `json:"tax" validate:"number,omitempty"`
|
|
}
|
|
|
|
type CreateInvoiceRequestBody struct {
|
|
ClientID string `json:"clientId" validate:"uuid4,required"`
|
|
DueAt string `json:"dueAt" validate:"datetime=2006-01-02T15:04:05Z,required"`
|
|
Currency string `json:"currency" validate:"iso4217,required"`
|
|
VAT uint32 `json:"vat" validate:"number,omitempty"`
|
|
Items []CreateItemRequestBody `json:"items"`
|
|
}
|
|
|
|
type UpdateInvoiceRequestBody struct {
|
|
DueAt string `json:"dueAt" validte:"datetime=2006-01-02T15:04:05Z,omitempty"`
|
|
Currency string `json:"currency" validate:"iso4217,omitempty"`
|
|
VAT uint32 `json:"vat" validate:"number,omitempty"`
|
|
Status string `json:"status" validate:"alpha,omitempty"`
|
|
}
|