Files
herolib/lib/hero/heromodels/rpc/rpc_project.v
2025-09-14 14:00:21 +02:00

92 lines
2.3 KiB
V

module rpc
import json
import freeflowuniverse.herolib.schemas.jsonrpc { Request, Response, new_response_true, new_response_u32 }
import freeflowuniverse.herolib.hero.heromodels
import freeflowuniverse.herolib.hero.db
// Project-specific argument structures
@[params]
pub struct ProjectGetArgs {
pub mut:
id u32 @[required]
}
@[params]
pub struct ProjectSetArgs {
pub mut:
name string
description string
swimlanes []heromodels.Swimlane
milestones []heromodels.Milestone
issues []string
fs_files []u32
status heromodels.ProjectStatus
start_date string // Use ourtime module to convert to epoch
end_date string // Use ourtime module to convert to epoch
securitypolicy u32
tags []string
comments []db.CommentArg
}
@[params]
pub struct ProjectDeleteArgs {
pub mut:
id u32 @[required]
}
pub fn project_get(request Request) !Response {
payload := jsonrpc.decode_payload[ProjectGetArgs](request.params) or {
return jsonrpc.invalid_params
}
mut mydb := heromodels.new()!
project := mydb.project.get(payload.id)!
return jsonrpc.new_response(request.id, json.encode(project))
}
pub fn project_set(request Request) !Response {
payload := jsonrpc.decode_payload[ProjectSetArgs](request.params) or {
return jsonrpc.invalid_params
}
mut mydb := heromodels.new()!
mut project_obj := mydb.project.new(
name: payload.name
description: payload.description
swimlanes: payload.swimlanes
milestones: payload.milestones
issues: payload.issues
fs_files: payload.fs_files
status: payload.status
start_date: payload.start_date
end_date: payload.end_date
securitypolicy: payload.securitypolicy
tags: payload.tags
comments: payload.comments
)!
id := mydb.project.set(project_obj)!
return new_response_u32(request.id, id)
}
pub fn project_delete(request Request) !Response {
payload := jsonrpc.decode_payload[ProjectDeleteArgs](request.params) or {
return jsonrpc.invalid_params
}
mut mydb := heromodels.new()!
mydb.project.delete(payload.id)!
return new_response_true(request.id) // return true as jsonrpc (bool)
}
pub fn project_list(request Request) !Response {
mut mydb := heromodels.new()!
projects := mydb.project.list()!
return jsonrpc.new_response(request.id, json.encode(projects))
}