Backend: - Add registry_address configuration API (GET/POST) - Add tar image upload with OCI and Docker format support - Add image download with streaming optimization - Fix blob download using c.Send (Fiber v3 SendStream bug) - Add registry_address prefix stripping for all OCI v2 endpoints - Add AGENTS.md for project documentation Frontend: - Add settings store with Snackbar notifications - Add image upload dialog with progress bar - Add download state tracking with multi-stage feedback - Replace alert() with MUI Snackbar messages - Display image names without registry_address prefix 🤖 Generated with [Qoder](https://qoder.com)
82 lines
3.0 KiB
Go
82 lines
3.0 KiB
Go
package model
|
|
|
|
import (
|
|
"time"
|
|
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// Repository ????
|
|
type Repository struct {
|
|
ID uint `gorm:"primarykey" json:"id"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
|
|
|
Name string `gorm:"uniqueIndex;not null" json:"name"` // ?????? "library/nginx"
|
|
}
|
|
|
|
// Blob blob ??
|
|
type Blob struct {
|
|
ID uint `gorm:"primarykey" json:"id"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
|
|
|
Digest string `gorm:"uniqueIndex;not null" json:"digest"` // SHA256 digest
|
|
Size int64 `gorm:"not null" json:"size"` // ??????
|
|
MediaType string `json:"media_type"` // ????
|
|
Repository string `gorm:"index" json:"repository"` // ???????????????
|
|
}
|
|
|
|
// Manifest manifest ??
|
|
type Manifest struct {
|
|
ID uint `gorm:"primarykey" json:"id"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
|
|
|
Repository string `gorm:"index;not null" json:"repository"` // ????
|
|
Tag string `gorm:"index;not null" json:"tag"` // tag ??
|
|
Digest string `gorm:"uniqueIndex;not null" json:"digest"` // manifest digest
|
|
MediaType string `json:"media_type"` // ????
|
|
Size int64 `gorm:"not null" json:"size"` // manifest ??
|
|
Content []byte `gorm:"type:blob" json:"-"` // manifest ???JSON?
|
|
}
|
|
|
|
// Tag tag ??????????
|
|
type Tag struct {
|
|
ID uint `gorm:"primarykey" json:"id"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
|
|
|
Repository string `gorm:"index;not null" json:"repository"` // ????
|
|
Tag string `gorm:"index;not null" json:"tag"` // tag ??
|
|
Digest string `gorm:"not null" json:"digest"` // ??? manifest digest
|
|
}
|
|
|
|
// BlobUpload ????? blob ??
|
|
type BlobUpload struct {
|
|
ID uint `gorm:"primarykey" json:"id"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
|
|
|
UUID string `gorm:"uniqueIndex;not null" json:"uuid"` // ???? UUID
|
|
Repository string `gorm:"index;not null" json:"repository"` // ????
|
|
Path string `gorm:"not null" json:"path"` // ??????
|
|
Size int64 `gorm:"default:0" json:"size"` // ?????
|
|
}
|
|
|
|
// RegistryConfig registry ?????
|
|
type RegistryConfig struct {
|
|
ID uint `gorm:"primarykey" json:"id"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
|
|
|
|
Key string `gorm:"uniqueIndex;not null" json:"key"` // ???? key
|
|
Value string `gorm:"type:text" json:"value"` // ???? value
|
|
}
|