ggdgsdbsdbbb / repo / release_routes.v
66 lines · 55 sloc · 1.71 KB · 8f0e771bc9f2b6856d7034474716b39a5e96c171
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 page_i := page.int()
18 repo_id := repo.id
19 mut releases := []Release{}
20 mut release := Release{}
21
22 release_count := app.get_repo_release_count(repo_id)
23 offset := releases_per_page * page_i
24 page_count := calculate_pages(release_count, releases_per_page)
25 is_first_page := check_first_page(page_i)
26 is_last_page := check_last_page(release_count, offset, releases_per_page)
27 prev_page, next_page := generate_prev_next_pages(page_i)
28
29 tags := app.get_all_repo_tags(repo_id)
30 rels := app.find_repo_releases_as_page(repo_id, offset)
31 users := app.find_repo_registered_contributor(repo_id)
32
33 download_archive_prefix := '/${username}/${repo_name}/tag'
34
35 mut rel := Release{}
36 mut tag := Tag{}
37 mut user := User{}
38 mut i := 0
39 mut j := 0
40 for i = 0; i < rels.len; i++ {
41 rel = rels[i]
42 release.notes = rel.notes
43 mut user_id := 0
44
45 for j = 0; j < tags.len; j++ {
46 tag = tags[j]
47 if tag.id == rel.tag_id {
48 release.tag_name = tag.name
49 release.tag_hash = tag.hash
50 release.date = time.unix(tag.created_at)
51 user_id = tag.user_id
52 break
53 }
54 }
55 for j = 0; j < users.len; j++ {
56 user = users[j]
57 if user.id == user_id {
58 release.user = user.username
59 break
60 }
61 }
62 releases << release
63 }
64
65 return $veb.html()
66}
67