summaryrefslogtreecommitdiffstats
path: root/modules/structs/quota.go
blob: cb8874ab0c25c89dc5a128def7ff9d2175f78cdc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
// Copyright 2024 The Forgejo Authors. All rights reserved.
// SPDX-License-Identifier: MIT

package structs

// QuotaInfo represents information about a user's quota
type QuotaInfo struct {
	Used   QuotaUsed      `json:"used"`
	Groups QuotaGroupList `json:"groups"`
}

// QuotaUsed represents the quota usage of a user
type QuotaUsed struct {
	Size QuotaUsedSize `json:"size"`
}

// QuotaUsedSize represents the size-based quota usage of a user
type QuotaUsedSize struct {
	Repos  QuotaUsedSizeRepos  `json:"repos"`
	Git    QuotaUsedSizeGit    `json:"git"`
	Assets QuotaUsedSizeAssets `json:"assets"`
}

// QuotaUsedSizeRepos represents the size-based repository quota usage of a user
type QuotaUsedSizeRepos struct {
	// Storage size of the user's public repositories
	Public int64 `json:"public"`
	// Storage size of the user's private repositories
	Private int64 `json:"private"`
}

// QuotaUsedSizeGit represents the size-based git (lfs) quota usage of a user
type QuotaUsedSizeGit struct {
	// Storage size of the user's Git LFS objects
	LFS int64 `json:"LFS"`
}

// QuotaUsedSizeAssets represents the size-based asset usage of a user
type QuotaUsedSizeAssets struct {
	Attachments QuotaUsedSizeAssetsAttachments `json:"attachments"`
	// Storage size used for the user's artifacts
	Artifacts int64                       `json:"artifacts"`
	Packages  QuotaUsedSizeAssetsPackages `json:"packages"`
}

// QuotaUsedSizeAssetsAttachments represents the size-based attachment quota usage of a user
type QuotaUsedSizeAssetsAttachments struct {
	// Storage size used for the user's issue & comment attachments
	Issues int64 `json:"issues"`
	// Storage size used for the user's release attachments
	Releases int64 `json:"releases"`
}

// QuotaUsedSizeAssetsPackages represents the size-based package quota usage of a user
type QuotaUsedSizeAssetsPackages struct {
	// Storage suze used for the user's packages
	All int64 `json:"all"`
}

// QuotaRuleInfo contains information about a quota rule
type QuotaRuleInfo struct {
	// Name of the rule (only shown to admins)
	Name string `json:"name,omitempty"`
	// The limit set by the rule
	Limit int64 `json:"limit"`
	// Subjects the rule affects
	Subjects []string `json:"subjects,omitempty"`
}

// QuotaGroupList represents a list of quota groups
type QuotaGroupList []QuotaGroup

// QuotaGroup represents a quota group
type QuotaGroup struct {
	// Name of the group
	Name string `json:"name,omitempty"`
	// Rules associated with the group
	Rules []QuotaRuleInfo `json:"rules"`
}

// CreateQutaGroupOptions represents the options for creating a quota group
type CreateQuotaGroupOptions struct {
	// Name of the quota group to create
	Name string `json:"name" binding:"Required"`
	// Rules to add to the newly created group.
	// If a rule does not exist, it will be created.
	Rules []CreateQuotaRuleOptions `json:"rules"`
}

// CreateQuotaRuleOptions represents the options for creating a quota rule
type CreateQuotaRuleOptions struct {
	// Name of the rule to create
	Name string `json:"name" binding:"Required"`
	// The limit set by the rule
	Limit *int64 `json:"limit"`
	// The subjects affected by the rule
	Subjects []string `json:"subjects"`
}

// EditQuotaRuleOptions represents the options for editing a quota rule
type EditQuotaRuleOptions struct {
	// The limit set by the rule
	Limit *int64 `json:"limit"`
	// The subjects affected by the rule
	Subjects *[]string `json:"subjects"`
}

// SetUserQuotaGroupsOptions represents the quota groups of a user
type SetUserQuotaGroupsOptions struct {
	// Quota groups the user shall have
	// required: true
	Groups *[]string `json:"groups"`
}

// QuotaUsedAttachmentList represents a list of attachment counting towards a user's quota
type QuotaUsedAttachmentList []*QuotaUsedAttachment

// QuotaUsedAttachment represents an attachment counting towards a user's quota
type QuotaUsedAttachment struct {
	// Filename of the attachment
	Name string `json:"name"`
	// Size of the attachment (in bytes)
	Size int64 `json:"size"`
	// API URL for the attachment
	APIURL string `json:"api_url"`
	// Context for the attachment: URLs to the containing object
	ContainedIn struct {
		// API URL for the object that contains this attachment
		APIURL string `json:"api_url"`
		// HTML URL for the object that contains this attachment
		HTMLURL string `json:"html_url"`
	} `json:"contained_in"`
}

// QuotaUsedPackageList represents a list of packages counting towards a user's quota
type QuotaUsedPackageList []*QuotaUsedPackage

// QuotaUsedPackage represents a package counting towards a user's quota
type QuotaUsedPackage struct {
	// Name of the package
	Name string `json:"name"`
	// Type of the package
	Type string `json:"type"`
	// Version of the package
	Version string `json:"version"`
	// Size of the package version
	Size int64 `json:"size"`
	// HTML URL to the package version
	HTMLURL string `json:"html_url"`
}

// QuotaUsedArtifactList represents a list of artifacts counting towards a user's quota
type QuotaUsedArtifactList []*QuotaUsedArtifact

// QuotaUsedArtifact represents an artifact counting towards a user's quota
type QuotaUsedArtifact struct {
	// Name of the artifact
	Name string `json:"name"`
	// Size of the artifact (compressed)
	Size int64 `json:"size"`
	// HTML URL to the action run containing the artifact
	HTMLURL string `json:"html_url"`
}