forked from vieter-v/vieter
refactor: separated GitRepo types into own module
feat: added more query params for GitRepo API
This commit is contained in:
parent
5e81dadce3
commit
6bd5b7cb48
12 changed files with 114 additions and 122 deletions
|
|
@ -1,6 +1,7 @@
|
|||
module db
|
||||
|
||||
import sqlite
|
||||
import models
|
||||
|
||||
struct VieterDb {
|
||||
conn sqlite.DB
|
||||
|
|
|
|||
|
|
@ -1,26 +0,0 @@
|
|||
module db
|
||||
|
||||
[params]
|
||||
pub struct GitRepoFilter {
|
||||
pub mut:
|
||||
limit u64 = 25
|
||||
offset u64
|
||||
repo string
|
||||
}
|
||||
|
||||
pub fn filter_from_params<T>(params map[string]string) ?T {
|
||||
mut o := GitRepoFilter{}
|
||||
|
||||
$for field in T.fields {
|
||||
if field.name in params {
|
||||
val := params[field.name]
|
||||
|
||||
$if field.typ is string {
|
||||
o.$(field.name) = val
|
||||
} $else $if field.typ is u64 {
|
||||
o.$(field.name) = val.u64()
|
||||
}
|
||||
}
|
||||
}
|
||||
return o
|
||||
}
|
||||
77
src/db/git.v
77
src/db/git.v
|
|
@ -1,84 +1,9 @@
|
|||
module db
|
||||
|
||||
pub struct GitRepoArch {
|
||||
pub:
|
||||
id int [primary; sql: serial]
|
||||
repo_id int [nonull]
|
||||
value string [nonull]
|
||||
}
|
||||
|
||||
// str returns a string representation.
|
||||
pub fn (gra &GitRepoArch) str() string {
|
||||
return gra.value
|
||||
}
|
||||
|
||||
pub struct GitRepo {
|
||||
pub mut:
|
||||
id int [optional; primary; sql: serial]
|
||||
// URL of the Git repository
|
||||
url string [nonull]
|
||||
// Branch of the Git repository to use
|
||||
branch string [nonull]
|
||||
// Which repo the builder should publish packages to
|
||||
repo string [nonull]
|
||||
// Cron schedule describing how frequently to build the repo.
|
||||
schedule string [optional]
|
||||
// On which architectures the package is allowed to be built. In reality,
|
||||
// this controls which builders will periodically build the image.
|
||||
arch []GitRepoArch [fkey: 'repo_id']
|
||||
}
|
||||
|
||||
// str returns a string representation.
|
||||
pub fn (gr &GitRepo) str() string {
|
||||
mut parts := [
|
||||
'id: $gr.id',
|
||||
'url: $gr.url',
|
||||
'branch: $gr.branch',
|
||||
'repo: $gr.repo',
|
||||
'schedule: $gr.schedule',
|
||||
'arch: ${gr.arch.map(it.value).join(', ')}',
|
||||
]
|
||||
str := parts.join('\n')
|
||||
|
||||
return str
|
||||
}
|
||||
|
||||
// patch_from_params patches a GitRepo from a map[string]string, usually
|
||||
// provided from a web.App's params
|
||||
pub fn (mut r GitRepo) patch_from_params(params map[string]string) {
|
||||
$for field in GitRepo.fields {
|
||||
if field.name in params {
|
||||
$if field.typ is string {
|
||||
r.$(field.name) = params[field.name]
|
||||
// This specific type check is needed for the compiler to ensure
|
||||
// our types are correct
|
||||
} $else $if field.typ is []GitRepoArch {
|
||||
r.$(field.name) = params[field.name].split(',').map(GitRepoArch{ value: it })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// git_repo_from_params creates a GitRepo from a map[string]string, usually
|
||||
// provided from a web.App's params
|
||||
pub fn git_repo_from_params(params map[string]string) ?GitRepo {
|
||||
mut repo := GitRepo{}
|
||||
|
||||
// If we're creating a new GitRepo, we want all fields to be present before
|
||||
// "patching".
|
||||
$for field in GitRepo.fields {
|
||||
if field.name !in params && !field.attrs.contains('optional') {
|
||||
return error('Missing parameter: ${field.name}.')
|
||||
}
|
||||
}
|
||||
repo.patch_from_params(params)
|
||||
|
||||
return repo
|
||||
}
|
||||
import models { GitRepo, GitRepoArch, GitRepoFilter }
|
||||
|
||||
// get_git_repos returns all GitRepo's in the database.
|
||||
pub fn (db &VieterDb) get_git_repos(filter GitRepoFilter) []GitRepo {
|
||||
println(filter)
|
||||
// This seems to currently be blocked by a bug in the ORM, I'll have to ask
|
||||
// around.
|
||||
if filter.repo != '' {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue