gitlyx / repo / release_routes.v
70 lines · 58 sloc · 1.77 KB · 13ca859655a005b2a87a4935764694302b4f2fda
Raw
1module main
2
3import veb
4import time
5
6const releases_per_page = 20
7
8@['/:username/:repo_name/releases']
9pub fn (mut app App) releases_default(mut ctx Context, username string, repo_name string) veb.Result {
10 return app.releases(mut ctx, username, repo_name, '0')
11}
12
13@['/:username/:repo_name/releases/:page']
14pub fn (mut app App) releases(mut ctx Context, username string, repo_name string, page string) veb.Result {
15 repo := app.find_repo_by_name_and_username(repo_name, username) or { return ctx.not_found() }
16
17 if !app.can_read_repo(ctx, repo) {
18 return ctx.not_found()
19 }
20
21 page_i := page.int()
22 repo_id := repo.id
23 mut releases := []Release{}
24 mut release := Release{}
25
26 release_count := app.get_repo_release_count(repo_id)
27 offset := releases_per_page * page_i
28 page_count := calculate_pages(release_count, releases_per_page)
29 is_first_page := check_first_page(page_i)
30 is_last_page := check_last_page(release_count, offset, releases_per_page)
31 prev_page, next_page := generate_prev_next_pages(page_i)
32
33 tags := app.get_all_repo_tags(repo_id)
34 rels := app.find_repo_releases_as_page(repo_id, offset)
35 users := app.find_repo_registered_contributor(repo_id)
36
37 download_archive_prefix := '/${username}/${repo_name}/tag'
38
39 mut rel := Release{}
40 mut tag := Tag{}
41 mut user := User{}
42 mut i := 0
43 mut j := 0
44 for i = 0; i < rels.len; i++ {
45 rel = rels[i]
46 release.notes = rel.notes
47 mut user_id := 0
48
49 for j = 0; j < tags.len; j++ {
50 tag = tags[j]
51 if tag.id == rel.tag_id {
52 release.tag_name = tag.name
53 release.tag_hash = tag.hash
54 release.date = time.unix(tag.created_at)
55 user_id = tag.user_id
56 break
57 }
58 }
59 for j = 0; j < users.len; j++ {
60 user = users[j]
61 if user.id == user_id {
62 release.user = user.username
63 break
64 }
65 }
66 releases << release
67 }
68
69 return $veb.html()
70}
71