From b9dbdeaba817ae66781a89b9c333d96147483a36 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Wed, 22 Apr 2026 17:04:36 +0300 Subject: [PATCH] full path not needed --- admin/admin_routes.v | 17 +++++++++-------- ci/ci_routes.v | 10 +++++++--- commit/commit_routes.v | 13 +++++++------ feed_routes.v | 11 ++++++----- issue_routes.v | 28 +++++++++++++++------------- repo/branch_routes.v | 2 +- repo/file_routes.v | 18 +++++++++--------- repo/release_routes.v | 13 +++++++------ repo/repo_routes.v | 34 ++++++++++++++++++++++------------ security/security_log_routes.v | 2 +- ssh/ssh_key_routes.v | 8 ++++---- user/user_routes.v | 8 ++++---- 12 files changed, 92 insertions(+), 72 deletions(-) diff --git a/admin/admin_routes.v b/admin/admin_routes.v index dd858dc..7cfbd40 100644 --- a/admin/admin_routes.v +++ b/admin/admin_routes.v @@ -12,7 +12,7 @@ pub fn (mut app App) admin_settings(mut ctx Context) veb.Result { return ctx.redirect_to_index() } - return $veb.html('../templates/admin/settings.html') + return $veb.html('templates/admin/settings.html') } @['/admin/settings'; post] @@ -43,24 +43,25 @@ pub fn (mut app App) handle_admin_edit_user(user_id string) veb.Result { @['/admin/users'] pub fn (mut app App) admin_users_default(mut ctx Context) veb.Result { - return app.admin_users(mut ctx, 0) + return app.admin_users(mut ctx, '0') } @['/admin/users/:page'] -pub fn (mut app App) admin_users(mut ctx Context, page int) veb.Result { +pub fn (mut app App) admin_users(mut ctx Context, page string) veb.Result { if !ctx.is_admin() { return ctx.redirect_to_index() } + page_i := page.int() user_count := app.get_all_registered_user_count() - offset := admin_users_per_page * page + offset := admin_users_per_page * page_i users := app.get_all_registered_users_as_page(offset) page_count := calculate_pages(user_count, admin_users_per_page) - is_first_page := check_first_page(page) + is_first_page := check_first_page(page_i) is_last_page := check_last_page(user_count, offset, admin_users_per_page) - prev_page, next_page := generate_prev_next_pages(page) + prev_page, next_page := generate_prev_next_pages(page_i) - return $veb.html('../templates/admin/users.html') + return $veb.html('templates/admin/users.html') } @['/admin/statistics'] @@ -68,5 +69,5 @@ pub fn (mut app App) admin_statistics() veb.Result { if !ctx.is_admin() { return ctx.redirect_to_index() } - return $veb.html('../templates/admin/statistics.html') + return $veb.html('templates/admin/statistics.html') } diff --git a/ci/ci_routes.v b/ci/ci_routes.v index 2e8020a..7d5f1a8 100644 --- a/ci/ci_routes.v +++ b/ci/ci_routes.v @@ -1,6 +1,7 @@ module main import veb +import api import json import net.http import os @@ -30,7 +31,10 @@ pub fn (mut app App) handle_ci_status_callback() veb.Result { return ctx.json_error('Failed to update CI status: ${err}') } - return ctx.json_success('ok') + return ctx.json(api.ApiSuccessResponse[string]{ + success: true + result: 'ok' + }) } // GET /:username/:repo_name/ci - CI runs list page @@ -77,7 +81,7 @@ pub fn (mut app App) ci_runs(username string, repo_name string) veb.Result { } } - return $veb.html('../templates/ci_runs.html') + return $veb.html() } // GET /:username/:repo_name/ci/:run_id_str - CI run detail page @@ -116,7 +120,7 @@ pub fn (mut app App) ci_run_detail(username string, repo_name string, run_id_str ci_run := run_data.result - return $veb.html('../templates/ci_run_detail.html') + return $veb.html() } // POST /:username/:repo_name/ci/:run_id_str/restart - Restart a CI run diff --git a/commit/commit_routes.v b/commit/commit_routes.v index e8ce255..a321b33 100644 --- a/commit/commit_routes.v +++ b/commit/commit_routes.v @@ -31,19 +31,20 @@ fn (mut app App) handle_commits_count(mut ctx Context, username string, repo_nam } @['/:username/:repo_name/:branch_name/commits/:page'] -pub fn (mut app App) commits(mut ctx Context, username string, repo_name string, branch_name string, page int) veb.Result { +pub fn (mut app App) commits(mut ctx Context, username string, repo_name string, branch_name string, page string) veb.Result { repo := app.find_repo_by_name_and_username(repo_name, username) or { return ctx.not_found() } + page_i := page.int() branch := app.find_repo_branch_by_name(repo.id, branch_name) commits_count := app.get_repo_commit_count(repo.id, branch.id) - offset := commits_per_page * page + offset := commits_per_page * page_i // FIXME: b_author always false b_author := false page_count := calculate_pages(commits_count, commits_per_page) - is_first_page := check_first_page(page) + is_first_page := check_first_page(page_i) is_last_page := check_last_page(commits_count, offset, commits_per_page) - prev_page, next_page := generate_prev_next_pages(page) + prev_page, next_page := generate_prev_next_pages(page_i) mut commits := app.find_repo_commits_as_page(repo.id, branch.id, offset) @@ -71,7 +72,7 @@ pub fn (mut app App) commits(mut ctx Context, username string, repo_name string, } } - return $veb.html('../templates/commits.html') + return $veb.html() } @['/:username/:repo_name/commit/:hash'] @@ -101,5 +102,5 @@ pub fn (mut app App) commit(mut ctx Context, username string, repo_name string, sources[change.file] = veb.RawHtml(src) } - return $veb.html('../templates/commit.html') + return $veb.html() } diff --git a/feed_routes.v b/feed_routes.v index 03ff040..c2bc7c5 100644 --- a/feed_routes.v +++ b/feed_routes.v @@ -4,24 +4,25 @@ import veb @['/:username/feed'] pub fn (mut app App) user_feed_default(mut ctx Context, username string) veb.Result { - return app.user_feed(mut ctx, username, 0) + return app.user_feed(mut ctx, username, '0') } @['/:username/feed/:page'] -pub fn (mut app App) user_feed(mut ctx Context, username string, page int) veb.Result { +pub fn (mut app App) user_feed(mut ctx Context, username string, page string) veb.Result { exists, user := app.check_username(username) if !exists || ctx.user.username != user.username { return ctx.not_found() } + page_i := page.int() user_id := ctx.user.id item_count := app.get_feed_items_count(user_id) - offset := feed_items_per_page * page + offset := feed_items_per_page * page_i page_count := calculate_pages(item_count, feed_items_per_page) - is_first_page := check_first_page(page) + is_first_page := check_first_page(page_i) is_last_page := check_last_page(item_count, offset, feed_items_per_page) - prev_page, next_page := generate_prev_next_pages(page) + prev_page, next_page := generate_prev_next_pages(page_i) feed := app.build_user_feed_as_page(user_id, offset) mut items_start_day_group := []int{} diff --git a/issue_routes.v b/issue_routes.v index 94c9622..0789cbf 100644 --- a/issue_routes.v +++ b/issue_routes.v @@ -40,7 +40,7 @@ pub fn (mut app App) new_issue(username string, repo_name string) veb.Result { @['/:username/issues'] pub fn (mut app App) handle_get_user_issues(mut ctx Context, username string) veb.Result { - return app.user_issues(mut ctx, username, 0) + return app.user_issues(mut ctx, username, '0') } @['/:username/:repo_name/issues'; post] @@ -69,14 +69,15 @@ pub fn (mut app App) handle_add_repo_issue(mut ctx Context, username string, rep @['/:username/:repo_name/issues'] pub fn (mut app App) handle_get_repo_issues(mut ctx Context, username string, repo_name string) veb.Result { - return app.issues(mut ctx, username, repo_name, 0) + return app.issues(mut ctx, username, repo_name, '0') } @['/:username/:repo_name/issues/:page'] -pub fn (mut app App) issues(mut ctx Context, username string, repo_name string, page int) veb.Result { +pub fn (mut app App) issues(mut ctx Context, username string, repo_name string, page string) veb.Result { repo := app.find_repo_by_name_and_username(repo_name, username) or { return ctx.not_found() } + page_i := page.int() mut issues_with_users := []IssueWithUser{} - for issue in app.find_repo_issues_as_page(repo.id, page) { + for issue in app.find_repo_issues_as_page(repo.id, page_i) { user := app.get_user_by_id(issue.author_id) or { continue } issues_with_users << IssueWithUser{ item: issue @@ -86,10 +87,10 @@ pub fn (mut app App) issues(mut ctx Context, username string, repo_name string, mut first := false mut last := false if repo.nr_open_issues > commits_per_page { - offset := page * commits_per_page + offset := page_i * commits_per_page delta := repo.nr_open_issues - offset if delta > 0 { - if delta == repo.nr_open_issues && page == 0 { + if delta == repo.nr_open_issues && page_i == 0 { first = true } else { last = true @@ -100,7 +101,7 @@ pub fn (mut app App) issues(mut ctx Context, username string, repo_name string, first = true } page_count := calculate_pages(repo.nr_open_issues, commits_per_page) - prev_page, next_page := generate_prev_next_pages(page) + prev_page, next_page := generate_prev_next_pages(page_i) return $veb.html() } @@ -121,7 +122,7 @@ pub fn (mut app App) issue(mut ctx Context, username string, repo_name string, i } @['/:username/issues/:page'] -pub fn (mut app App) user_issues(mut ctx Context, username string, page int) veb.Result { +pub fn (mut app App) user_issues(mut ctx Context, username string, page string) veb.Result { if !ctx.logged_in { return ctx.not_found() } @@ -132,6 +133,7 @@ pub fn (mut app App) user_issues(mut ctx Context, username string, page int) veb if !exists { return ctx.not_found() } + page_i := page.int() mut issues := app.find_user_issues(user.id) mut first := false mut last := false @@ -141,10 +143,10 @@ pub fn (mut app App) user_issues(mut ctx Context, username string, page int) veb issues[i].repo_name = repo.name } if issues.len > commits_per_page { - offset := page * commits_per_page + offset := page_i * commits_per_page delta := issues.len - offset if delta > 0 { - if delta == issues.len && page == 0 { + if delta == issues.len && page_i == 0 { first = true } else { last = true @@ -163,9 +165,9 @@ pub fn (mut app App) user_issues(mut ctx Context, username string, page int) veb } } mut last_site := 0 - if page > 0 { - last_site = page - 1 + if page_i > 0 { + last_site = page_i - 1 } - next_site := page + 1 + next_site := page_i + 1 return $veb.html() } diff --git a/repo/branch_routes.v b/repo/branch_routes.v index 7f0b6f7..41e246d 100644 --- a/repo/branch_routes.v +++ b/repo/branch_routes.v @@ -30,5 +30,5 @@ pub fn (mut app App) branches(username string, repo_name string) veb.Result { return ctx.json_error('Not found') } branches := app.get_all_repo_branches(repo.id) - return $veb.html('../templates/branches.html') + return $veb.html() } diff --git a/repo/file_routes.v b/repo/file_routes.v index b1d2945..5d930ca 100644 --- a/repo/file_routes.v +++ b/repo/file_routes.v @@ -14,7 +14,7 @@ pub fn (mut app App) new_file(username string, repo_name string, branch_name str default_content := '' default_filename := '' - return $veb.html('../templates/new_file.html') + return $veb.html('templates/new_file.html') } // GET /:username/:repo_name/new-ci-file - Show create .gitly-ci.yml form (pre-filled) @@ -36,7 +36,7 @@ pub fn (mut app App) new_ci_file(username string, repo_name string) veb.Result { - name: Test run: echo "running tests" ' - return $veb.html('../templates/new_file.html') + return $veb.html('templates/new_file.html') } // GET /:username/:repo_name/edit/:branch_name/:path... - Show edit file form @@ -50,7 +50,7 @@ pub fn (mut app App) edit_file(username string, repo_name string, branch_name st file_content := repo.read_file(branch_name, path) - return $veb.html('../templates/edit_file.html') + return $veb.html('templates/edit_file.html') } // POST /:username/:repo_name/update-file - Save edited file @@ -72,7 +72,7 @@ pub fn (mut app App) handle_update_file(username string, repo_name string) veb.R if commit_message == '' { ctx.error('Commit message is required') path := file_path - return $veb.html('../templates/edit_file.html') + return $veb.html('templates/edit_file.html') } mut actual_branch := branch_name @@ -86,7 +86,7 @@ pub fn (mut app App) handle_update_file(username string, repo_name string) veb.R if !success { ctx.error('Failed to save file') path := file_path - return $veb.html('../templates/edit_file.html') + return $veb.html('templates/edit_file.html') } // Clear cached files so the updated file shows up @@ -126,14 +126,14 @@ pub fn (mut app App) handle_create_file(username string, repo_name string) veb.R ctx.error('File path is required') default_content := file_content default_filename := file_path - return $veb.html('../templates/new_file.html') + return $veb.html('templates/new_file.html') } if commit_message == '' { ctx.error('Commit message is required') default_content := file_content default_filename := file_path - return $veb.html('../templates/new_file.html') + return $veb.html('templates/new_file.html') } // Sanitize file path @@ -141,7 +141,7 @@ pub fn (mut app App) handle_create_file(username string, repo_name string) veb.R ctx.error('Invalid file path') default_content := file_content default_filename := file_path - return $veb.html('../templates/new_file.html') + return $veb.html('templates/new_file.html') } mut actual_branch := branch_name @@ -156,7 +156,7 @@ pub fn (mut app App) handle_create_file(username string, repo_name string) veb.R ctx.error('Failed to create file') default_content := file_content default_filename := file_path - return $veb.html('../templates/new_file.html') + return $veb.html('templates/new_file.html') } // Clear cached files so the new file shows up diff --git a/repo/release_routes.v b/repo/release_routes.v index e91e7a3..10b1173 100644 --- a/repo/release_routes.v +++ b/repo/release_routes.v @@ -7,23 +7,24 @@ const releases_per_page = 20 @['/:username/:repo_name/releases'] pub fn (mut app App) releases_default(mut ctx Context, username string, repo_name string) veb.Result { - return app.releases(mut ctx, username, repo_name, 0) + return app.releases(mut ctx, username, repo_name, '0') } @['/:username/:repo_name/releases/:page'] -pub fn (mut app App) releases(mut ctx Context, username string, repo_name string, page int) veb.Result { +pub fn (mut app App) releases(mut ctx Context, username string, repo_name string, page string) veb.Result { repo := app.find_repo_by_name_and_username(repo_name, username) or { return ctx.not_found() } + page_i := page.int() repo_id := repo.id mut releases := []Release{} mut release := Release{} release_count := app.get_repo_release_count(repo_id) - offset := releases_per_page * page + offset := releases_per_page * page_i page_count := calculate_pages(release_count, releases_per_page) - is_first_page := check_first_page(page) + is_first_page := check_first_page(page_i) is_last_page := check_last_page(release_count, offset, releases_per_page) - prev_page, next_page := generate_prev_next_pages(page) + prev_page, next_page := generate_prev_next_pages(page_i) tags := app.get_all_repo_tags(repo_id) rels := app.find_repo_releases_as_page(repo_id, offset) @@ -53,5 +54,5 @@ pub fn (mut app App) releases(mut ctx Context, username string, repo_name string releases << release } - return $veb.html('../templates/releases.html') + return $veb.html() } diff --git a/repo/repo_routes.v b/repo/repo_routes.v index bb4c0fc..8103960 100644 --- a/repo/repo_routes.v +++ b/repo/repo_routes.v @@ -1,6 +1,7 @@ module main import veb +import api import crypto.sha1 import os import highlight @@ -22,7 +23,7 @@ pub fn (mut app App) user_repos(username string) veb.Result { repos = app.find_user_repos(user.id) } - return $veb.html('../templates/user/repos.html') + return $veb.html('templates/user/repos.html') } @['/:username/stars'] @@ -35,7 +36,7 @@ pub fn (mut app App) user_stars(username string) veb.Result { repos := app.find_user_starred_repos(ctx.user.id) - return $veb.html('../templates/user/stars.html') + return $veb.html('templates/user/stars.html') } @['/:username/:repo_name/settings'] @@ -49,7 +50,7 @@ pub fn (mut app App) repo_settings(username string, repo_name string) veb.Result return ctx.redirect_to_repository(username, repo_name) } - return $veb.html('../templates/repo/settings.html') + return $veb.html('templates/repo/settings.html') } @['/:username/:repo_name/settings'; post] @@ -181,7 +182,7 @@ pub fn (mut app App) new() veb.Result { if !ctx.logged_in { return ctx.redirect_to_login() } - return $veb.html('../templates/new.html') + return $veb.html() } @['/new'; post] @@ -339,7 +340,7 @@ fn clone_repo(mut new_repo Repo) { } pub fn (mut app App) kekw(mut ctx Context) veb.Result { - return $veb.html('../templates/cloning_in_process.html') + return $veb.html('templates/cloning_in_process.html') } @['/:username/:repo_name/tree/:branch_name/:path...'] @@ -350,7 +351,7 @@ pub fn (mut app App) tree(mut ctx Context, username string, repo_name string, br } eprintln('!!! REPO STATUS = ${repo.status}') if repo.status == .cloning { - return $veb.html('../templates/cloning_in_process.html') + return $veb.html('templates/cloning_in_process.html') } _, user := app.check_username(username) @@ -475,7 +476,7 @@ pub fn (mut app App) tree(mut ctx Context, username string, repo_name string, br } has_ci := ci_status.id != 0 - return $veb.html('../templates/tree.html') + return $veb.html() } @['/api/v1/repos/:repo_id/star'; 'post'] @@ -494,7 +495,10 @@ pub fn (mut app App) handle_api_repo_star(mut ctx Context, repo_id_str string) v } is_repo_starred := app.check_repo_starred(repo_id, user_id) - return ctx.json_success(is_repo_starred) + return ctx.json(api.ApiSuccessResponse[bool]{ + success: true + result: is_repo_starred + }) } @['/api/v1/repos/:repo_id/watch'; 'post'] @@ -513,7 +517,10 @@ pub fn (mut app App) handle_api_repo_watch(mut ctx Context, repo_id_str string) } is_watching := app.check_repo_watcher_status(repo_id, user_id) - return ctx.json_success(is_watching) + return ctx.json(api.ApiSuccessResponse[bool]{ + success: true + result: is_watching + }) } // API: get file listing with commit info for a directory (used by JS polling) @@ -544,7 +551,10 @@ pub fn (mut app App) handle_api_repo_files(mut ctx Context, repo_id_str string) } } - return ctx.json_success(result) + return ctx.json(api.ApiSuccessResponse[[]FileInfo]{ + success: true + result: result + }) } @['/:username/:repo_name/contributors'] @@ -553,7 +563,7 @@ pub fn (mut app App) contributors(mut ctx Context, username string, repo_name st contributors := app.find_repo_registered_contributor(repo.id) - return $veb.html('../templates/contributors.html') + return $veb.html() } @['/:username/:repo_name/blob/:branch_name/:path...'] @@ -580,7 +590,7 @@ pub fn (mut app App) blob(mut ctx Context, username string, repo_name string, br source := veb.RawHtml(highlighted_source) loc, sloc := calculate_lines_of_code(plain_text) - return $veb.html('../templates/blob.html') + return $veb.html() } @['/:user/:repository/raw/:branch_name/:path...'] diff --git a/security/security_log_routes.v b/security/security_log_routes.v index d883a29..f59566c 100644 --- a/security/security_log_routes.v +++ b/security/security_log_routes.v @@ -6,5 +6,5 @@ import veb fn (mut app App) security() veb.Result { logs := app.get_all_user_security_logs(ctx.user.id) - return $veb.html('../templates/security.html') + return $veb.html() } diff --git a/ssh/ssh_key_routes.v b/ssh/ssh_key_routes.v index b8aefbc..74ce993 100644 --- a/ssh/ssh_key_routes.v +++ b/ssh/ssh_key_routes.v @@ -14,7 +14,7 @@ pub fn (mut app App) user_ssh_keys_list(mut ctx Context, username string) veb.Re ssh_keys := app.find_ssh_keys(ctx.user.id) - return $veb.html('../templates/user/ssh/keys/list.html') + return $veb.html('templates/user/ssh/keys/list.html') } @['/:username/settings/ssh-keys'; 'post'] @@ -53,14 +53,14 @@ pub fn (mut app App) handle_add_ssh_key(mut ctx Context, username string) veb.Re } @['/:username/settings/ssh-keys/:id'; 'delete'] -pub fn (mut app App) handle_remove_ssh_key(mut ctx Context, username string, id int) veb.Result { +pub fn (mut app App) handle_remove_ssh_key(mut ctx Context, username string, id string) veb.Result { is_users_settings := username == ctx.user.username if !ctx.logged_in || !is_users_settings { return ctx.redirect_to_index() } - app.remove_ssh_key(ctx.user.id, id) or { + app.remove_ssh_key(ctx.user.id, id.int()) or { response := api.ApiErrorResponse{ message: 'There was an error while deleting the SSH key' } @@ -79,5 +79,5 @@ pub fn (mut app App) user_ssh_keys_new(mut ctx Context, username string) veb.Res return ctx.redirect_to_index() } - return $veb.html('../templates/user/ssh/keys/new.html') + return $veb.html('templates/user/ssh/keys/new.html') } diff --git a/user/user_routes.v b/user/user_routes.v index ae51d6b..4c0f3f7 100644 --- a/user/user_routes.v +++ b/user/user_routes.v @@ -15,7 +15,7 @@ pub fn (mut app App) login(mut ctx Context) veb.Result { return ctx.redirect('/' + ctx.user.username) } - return $veb.html('../templates/login.html') + return $veb.html() } @['/login'; post] @@ -69,7 +69,7 @@ pub fn (mut app App) user(mut ctx Context, username string) veb.Result { app.find_user_public_repos(user.id) } activities := app.find_activities(user.id) - return $veb.html('../templates/user.html') + return $veb.html() } @['/:username/settings'] @@ -80,7 +80,7 @@ pub fn (mut app App) user_settings(mut ctx Context, username string) veb.Result return ctx.redirect_to_index() } - return $veb.html('../templates/user/settings.html') + return $veb.html('templates/user/settings.html') } @['/:username/settings'; post] @@ -174,7 +174,7 @@ pub fn (mut app App) register(mut ctx Context) veb.Result { ctx.current_path = '' - return $veb.html('../templates/register.html') + return $veb.html() } @['/register'; post] -- 2.39.5