...
This commit is contained in:
@@ -24,5 +24,40 @@ pub fn start(args ServerArgs) ! {
|
||||
openrpc_handler.register_procedure_handle('calendar_delete', calendar_delete)
|
||||
openrpc_handler.register_procedure_handle('calendar_list', calendar_list)
|
||||
|
||||
openrpc_handler.register_procedure_handle('calendar_event_get', calendar_event_get)
|
||||
openrpc_handler.register_procedure_handle('calendar_event_set', calendar_event_set)
|
||||
openrpc_handler.register_procedure_handle('calendar_event_delete', calendar_event_delete)
|
||||
openrpc_handler.register_procedure_handle('calendar_event_list', calendar_event_list)
|
||||
|
||||
openrpc_handler.register_procedure_handle('chat_group_get', chat_group_get)
|
||||
openrpc_handler.register_procedure_handle('chat_group_set', chat_group_set)
|
||||
openrpc_handler.register_procedure_handle('chat_group_delete', chat_group_delete)
|
||||
openrpc_handler.register_procedure_handle('chat_group_list', chat_group_list)
|
||||
|
||||
openrpc_handler.register_procedure_handle('chat_message_get', chat_message_get)
|
||||
openrpc_handler.register_procedure_handle('chat_message_set', chat_message_set)
|
||||
openrpc_handler.register_procedure_handle('chat_message_delete', chat_message_delete)
|
||||
openrpc_handler.register_procedure_handle('chat_message_list', chat_message_list)
|
||||
|
||||
openrpc_handler.register_procedure_handle('group_get', group_get)
|
||||
openrpc_handler.register_procedure_handle('group_set', group_set)
|
||||
openrpc_handler.register_procedure_handle('group_delete', group_delete)
|
||||
openrpc_handler.register_procedure_handle('group_list', group_list)
|
||||
|
||||
openrpc_handler.register_procedure_handle('project_issue_get', project_issue_get)
|
||||
openrpc_handler.register_procedure_handle('project_issue_set', project_issue_set)
|
||||
openrpc_handler.register_procedure_handle('project_issue_delete', project_issue_delete)
|
||||
openrpc_handler.register_procedure_handle('project_issue_list', project_issue_list)
|
||||
|
||||
openrpc_handler.register_procedure_handle('project_get', project_get)
|
||||
openrpc_handler.register_procedure_handle('project_set', project_set)
|
||||
openrpc_handler.register_procedure_handle('project_delete', project_delete)
|
||||
openrpc_handler.register_procedure_handle('project_list', project_list)
|
||||
|
||||
openrpc_handler.register_procedure_handle('user_get', user_get)
|
||||
openrpc_handler.register_procedure_handle('user_set', user_set)
|
||||
openrpc_handler.register_procedure_handle('user_delete', user_delete)
|
||||
openrpc_handler.register_procedure_handle('user_list', user_list)
|
||||
|
||||
openrpc.start_unix_server(openrpc_handler, socket_path: args.socket_path)!
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
105
lib/hero/heromodels/rpc/rpc_calendar_event.v
Normal file
105
lib/hero/heromodels/rpc/rpc_calendar_event.v
Normal file
@@ -0,0 +1,105 @@
|
||||
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
|
||||
// CalendarEvent-specific argument structures
|
||||
|
||||
@[params]
|
||||
pub struct CalendarEventGetArgs {
|
||||
pub mut:
|
||||
id u32 @[required]
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct CalendarEventSetArgs {
|
||||
pub mut:
|
||||
name string
|
||||
description string
|
||||
title string
|
||||
start_time string // use ourtime module to go from string to epoch
|
||||
end_time string // use ourtime module to go from string to epoch
|
||||
location string
|
||||
attendees []u32 // IDs of user groups
|
||||
fs_items []u32 // IDs of linked files or dirs
|
||||
calendar_id u32 // Associated calendar
|
||||
status heromodels.EventStatus
|
||||
is_all_day bool
|
||||
is_recurring bool
|
||||
recurrence []heromodels.RecurrenceRule
|
||||
reminder_mins []int // Minutes before event for reminders
|
||||
color string // Hex color code
|
||||
timezone string
|
||||
securitypolicy u32
|
||||
tags []string
|
||||
comments []db.CommentArg
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct CalendarEventDeleteArgs {
|
||||
pub mut:
|
||||
id u32 @[required]
|
||||
}
|
||||
|
||||
pub fn calendar_event_get(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[CalendarEventGetArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
calendar_event := mydb.calendar_event.get(payload.id)!
|
||||
|
||||
return jsonrpc.new_response(request.id, json.encode(calendar_event))
|
||||
}
|
||||
|
||||
pub fn calendar_event_set(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[CalendarEventSetArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
mut calendar_event_obj := mydb.calendar_event.new(
|
||||
name: payload.name
|
||||
description: payload.description
|
||||
title: payload.title
|
||||
start_time: payload.start_time
|
||||
end_time: payload.end_time
|
||||
location: payload.location
|
||||
attendees: payload.attendees
|
||||
fs_items: payload.fs_items
|
||||
calendar_id: payload.calendar_id
|
||||
status: payload.status
|
||||
is_all_day: payload.is_all_day
|
||||
is_recurring: payload.is_recurring
|
||||
recurrence: payload.recurrence
|
||||
reminder_mins: payload.reminder_mins
|
||||
color: payload.color
|
||||
timezone: payload.timezone
|
||||
securitypolicy: payload.securitypolicy
|
||||
tags: payload.tags
|
||||
comments: payload.comments
|
||||
)!
|
||||
|
||||
id := mydb.calendar_event.set(calendar_event_obj)!
|
||||
|
||||
return new_response_u32(request.id, id)
|
||||
}
|
||||
|
||||
pub fn calendar_event_delete(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[CalendarEventDeleteArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
mydb.calendar_event.delete(payload.id)!
|
||||
|
||||
return new_response_true(request.id) // return true as jsonrpc (bool)
|
||||
}
|
||||
|
||||
pub fn calendar_event_list(request Request) !Response {
|
||||
mut mydb := heromodels.new()!
|
||||
calendar_events := mydb.calendar_event.list()!
|
||||
|
||||
return jsonrpc.new_response(request.id, json.encode(calendar_events))
|
||||
}
|
||||
83
lib/hero/heromodels/rpc/rpc_chat_group.v
Normal file
83
lib/hero/heromodels/rpc/rpc_chat_group.v
Normal file
@@ -0,0 +1,83 @@
|
||||
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
|
||||
// ChatGroup-specific argument structures
|
||||
|
||||
@[params]
|
||||
pub struct ChatGroupGetArgs {
|
||||
pub mut:
|
||||
id u32 @[required]
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct ChatGroupSetArgs {
|
||||
pub mut:
|
||||
name string
|
||||
description string
|
||||
chat_type heromodels.ChatType
|
||||
last_activity i64
|
||||
is_archived bool
|
||||
securitypolicy u32
|
||||
tags []string
|
||||
comments []db.CommentArg
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct ChatGroupDeleteArgs {
|
||||
pub mut:
|
||||
id u32 @[required]
|
||||
}
|
||||
|
||||
pub fn chat_group_get(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[ChatGroupGetArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
chat_group := mydb.chat_group.get(payload.id)!
|
||||
|
||||
return jsonrpc.new_response(request.id, json.encode(chat_group))
|
||||
}
|
||||
|
||||
pub fn chat_group_set(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[ChatGroupSetArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
mut chat_group_obj := mydb.chat_group.new(
|
||||
name: payload.name
|
||||
description: payload.description
|
||||
chat_type: payload.chat_type
|
||||
last_activity: payload.last_activity
|
||||
is_archived: payload.is_archived
|
||||
securitypolicy: payload.securitypolicy
|
||||
tags: payload.tags
|
||||
comments: payload.comments
|
||||
)!
|
||||
|
||||
id := mydb.chat_group.set(chat_group_obj)!
|
||||
|
||||
return new_response_u32(request.id, id)
|
||||
}
|
||||
|
||||
pub fn chat_group_delete(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[ChatGroupDeleteArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
mydb.chat_group.delete(payload.id)!
|
||||
|
||||
return new_response_true(request.id) // return true as jsonrpc (bool)
|
||||
}
|
||||
|
||||
pub fn chat_group_list(request Request) !Response {
|
||||
mut mydb := heromodels.new()!
|
||||
chat_groups := mydb.chat_group.list()!
|
||||
|
||||
return jsonrpc.new_response(request.id, json.encode(chat_groups))
|
||||
}
|
||||
95
lib/hero/heromodels/rpc/rpc_chat_message.v
Normal file
95
lib/hero/heromodels/rpc/rpc_chat_message.v
Normal file
@@ -0,0 +1,95 @@
|
||||
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
|
||||
// ChatMessage-specific argument structures
|
||||
|
||||
@[params]
|
||||
pub struct ChatMessageGetArgs {
|
||||
pub mut:
|
||||
id u32 @[required]
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct ChatMessageSetArgs {
|
||||
pub mut:
|
||||
name string
|
||||
description string
|
||||
content string
|
||||
chat_group_id u32
|
||||
sender_id u32
|
||||
parent_messages []heromodels.MessageLink
|
||||
fs_files []u32
|
||||
message_type heromodels.MessageType
|
||||
status heromodels.MessageStatus
|
||||
reactions []heromodels.MessageReaction
|
||||
mentions []u32
|
||||
securitypolicy u32
|
||||
tags []string
|
||||
comments []db.CommentArg
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct ChatMessageDeleteArgs {
|
||||
pub mut:
|
||||
id u32 @[required]
|
||||
}
|
||||
|
||||
pub fn chat_message_get(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[ChatMessageGetArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
chat_message := mydb.chat_message.get(payload.id)!
|
||||
|
||||
return jsonrpc.new_response(request.id, json.encode(chat_message))
|
||||
}
|
||||
|
||||
pub fn chat_message_set(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[ChatMessageSetArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
mut chat_message_obj := mydb.chat_message.new(
|
||||
name: payload.name
|
||||
description: payload.description
|
||||
content: payload.content
|
||||
chat_group_id: payload.chat_group_id
|
||||
sender_id: payload.sender_id
|
||||
parent_messages: payload.parent_messages
|
||||
fs_files: payload.fs_files
|
||||
message_type: payload.message_type
|
||||
status: payload.status
|
||||
reactions: payload.reactions
|
||||
mentions: payload.mentions
|
||||
securitypolicy: payload.securitypolicy
|
||||
tags: payload.tags
|
||||
comments: payload.comments
|
||||
)!
|
||||
|
||||
id := mydb.chat_message.set(chat_message_obj)!
|
||||
|
||||
return new_response_u32(request.id, id)
|
||||
}
|
||||
|
||||
pub fn chat_message_delete(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[ChatMessageDeleteArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
mydb.chat_message.delete(payload.id)!
|
||||
|
||||
return new_response_true(request.id) // return true as jsonrpc (bool)
|
||||
}
|
||||
|
||||
pub fn chat_message_list(request Request) !Response {
|
||||
mut mydb := heromodels.new()!
|
||||
chat_messages := mydb.chat_message.list()!
|
||||
|
||||
return jsonrpc.new_response(request.id, json.encode(chat_messages))
|
||||
}
|
||||
78
lib/hero/heromodels/rpc/rpc_group.v
Normal file
78
lib/hero/heromodels/rpc/rpc_group.v
Normal file
@@ -0,0 +1,78 @@
|
||||
module rpc
|
||||
|
||||
import json
|
||||
import freeflowuniverse.herolib.schemas.jsonrpc { Request, Response, new_response_true, new_response_u32 }
|
||||
import freeflowuniverse.herolib.hero.heromodels
|
||||
|
||||
// Group-specific argument structures
|
||||
@[params]
|
||||
pub struct GroupGetArgs {
|
||||
pub mut:
|
||||
id u32 @[required]
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct GroupSetArgs {
|
||||
pub mut:
|
||||
name string
|
||||
description string
|
||||
members []heromodels.GroupMember
|
||||
subgroups []u32
|
||||
parent_group u32
|
||||
is_public bool
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct GroupDeleteArgs {
|
||||
pub mut:
|
||||
id u32 @[required]
|
||||
}
|
||||
|
||||
pub fn group_get(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[GroupGetArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
group := mydb.group.get(payload.id)!
|
||||
|
||||
return jsonrpc.new_response(request.id, json.encode(group))
|
||||
}
|
||||
|
||||
pub fn group_set(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[GroupSetArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
mut group_obj := mydb.group.new(
|
||||
name: payload.name
|
||||
description: payload.description
|
||||
members: payload.members
|
||||
subgroups: payload.subgroups
|
||||
parent_group: payload.parent_group
|
||||
is_public: payload.is_public
|
||||
)!
|
||||
|
||||
id := mydb.group.set(group_obj)!
|
||||
|
||||
return new_response_u32(request.id, id)
|
||||
}
|
||||
|
||||
pub fn group_delete(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[GroupDeleteArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
mydb.group.delete(payload.id)!
|
||||
|
||||
return new_response_true(request.id) // return true as jsonrpc (bool)
|
||||
}
|
||||
|
||||
pub fn group_list(request Request) !Response {
|
||||
mut mydb := heromodels.new()!
|
||||
groups := mydb.group.list()!
|
||||
|
||||
return jsonrpc.new_response(request.id, json.encode(groups))
|
||||
}
|
||||
91
lib/hero/heromodels/rpc/rpc_project.v
Normal file
91
lib/hero/heromodels/rpc/rpc_project.v
Normal file
@@ -0,0 +1,91 @@
|
||||
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))
|
||||
}
|
||||
105
lib/hero/heromodels/rpc/rpc_project_issue.v
Normal file
105
lib/hero/heromodels/rpc/rpc_project_issue.v
Normal file
@@ -0,0 +1,105 @@
|
||||
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
|
||||
// ProjectIssue-specific argument structures
|
||||
|
||||
@[params]
|
||||
pub struct ProjectIssueGetArgs {
|
||||
pub mut:
|
||||
id u32 @[required]
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct ProjectIssueSetArgs {
|
||||
pub mut:
|
||||
name string
|
||||
description string
|
||||
title string
|
||||
project_id u32
|
||||
issue_type heromodels.IssueType
|
||||
priority heromodels.IssuePriority
|
||||
status heromodels.IssueStatus
|
||||
swimlane string
|
||||
assignees []u32
|
||||
reporter u32
|
||||
milestone string
|
||||
deadline string // Use ourtime module to convert to epoch
|
||||
estimate int
|
||||
fs_files []u32
|
||||
parent_id u32
|
||||
children []u32
|
||||
securitypolicy u32
|
||||
tags []string
|
||||
comments []db.CommentArg
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct ProjectIssueDeleteArgs {
|
||||
pub mut:
|
||||
id u32 @[required]
|
||||
}
|
||||
|
||||
pub fn project_issue_get(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[ProjectIssueGetArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
project_issue := mydb.project_issue.get(payload.id)!
|
||||
|
||||
return jsonrpc.new_response(request.id, json.encode(project_issue))
|
||||
}
|
||||
|
||||
pub fn project_issue_set(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[ProjectIssueSetArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
mut project_issue_obj := mydb.project_issue.new(
|
||||
name: payload.name
|
||||
description: payload.description
|
||||
title: payload.title
|
||||
project_id: payload.project_id
|
||||
issue_type: payload.issue_type
|
||||
priority: payload.priority
|
||||
status: payload.status
|
||||
swimlane: payload.swimlane
|
||||
assignees: payload.assignees
|
||||
reporter: payload.reporter
|
||||
milestone: payload.milestone
|
||||
deadline: payload.deadline
|
||||
estimate: payload.estimate
|
||||
fs_files: payload.fs_files
|
||||
parent_id: payload.parent_id
|
||||
children: payload.children
|
||||
securitypolicy: payload.securitypolicy
|
||||
tags: payload.tags
|
||||
comments: payload.comments
|
||||
)!
|
||||
|
||||
id := mydb.project_issue.set(project_issue_obj)!
|
||||
|
||||
return new_response_u32(request.id, id)
|
||||
}
|
||||
|
||||
pub fn project_issue_delete(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[ProjectIssueDeleteArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
mydb.project_issue.delete(payload.id)!
|
||||
|
||||
return new_response_true(request.id) // return true as jsonrpc (bool)
|
||||
}
|
||||
|
||||
pub fn project_issue_list(request Request) !Response {
|
||||
mut mydb := heromodels.new()!
|
||||
project_issues := mydb.project_issue.list()!
|
||||
|
||||
return jsonrpc.new_response(request.id, json.encode(project_issues))
|
||||
}
|
||||
92
lib/hero/heromodels/rpc/rpc_user.v
Normal file
92
lib/hero/heromodels/rpc/rpc_user.v
Normal file
@@ -0,0 +1,92 @@
|
||||
module rpc
|
||||
|
||||
import json
|
||||
import freeflowuniverse.herolib.schemas.jsonrpc { Request, Response, new_response_true, new_response_u32 }
|
||||
import freeflowuniverse.herolib.hero.heromodels
|
||||
|
||||
// User-specific argument structures
|
||||
@[params]
|
||||
pub struct UserGetArgs {
|
||||
pub mut:
|
||||
id u32 @[required]
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct UserSetArgs {
|
||||
pub mut:
|
||||
name string @[required]
|
||||
description string
|
||||
email string
|
||||
public_key string // for encryption/signing
|
||||
phone string
|
||||
address string
|
||||
avatar_url string
|
||||
bio string
|
||||
timezone string
|
||||
status heromodels.UserStatus
|
||||
securitypolicy u32
|
||||
tags u32
|
||||
comments []u32
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct UserDeleteArgs {
|
||||
pub mut:
|
||||
id u32 @[required]
|
||||
}
|
||||
|
||||
pub fn user_get(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[UserGetArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
user := mydb.user.get(payload.id)!
|
||||
|
||||
return jsonrpc.new_response(request.id, json.encode(user))
|
||||
}
|
||||
|
||||
pub fn user_set(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[UserSetArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
mut user_obj := mydb.user.new(
|
||||
name: payload.name
|
||||
description: payload.description
|
||||
email: payload.email
|
||||
public_key: payload.public_key
|
||||
phone: payload.phone
|
||||
address: payload.address
|
||||
avatar_url: payload.avatar_url
|
||||
bio: payload.bio
|
||||
timezone: payload.timezone
|
||||
status: payload.status
|
||||
securitypolicy: payload.securitypolicy
|
||||
tags: payload.tags
|
||||
comments: payload.comments
|
||||
)!
|
||||
|
||||
id := mydb.user.set(user_obj)!
|
||||
|
||||
return new_response_u32(request.id, id)
|
||||
}
|
||||
|
||||
pub fn user_delete(request Request) !Response {
|
||||
payload := jsonrpc.decode_payload[UserDeleteArgs](request.params) or {
|
||||
return jsonrpc.invalid_params
|
||||
}
|
||||
|
||||
mut mydb := heromodels.new()!
|
||||
mydb.user.delete(payload.id)!
|
||||
|
||||
return new_response_true(request.id) // return true as jsonrpc (bool)
|
||||
}
|
||||
|
||||
pub fn user_list(request Request) !Response {
|
||||
mut mydb := heromodels.new()!
|
||||
users := mydb.user.list()!
|
||||
|
||||
return jsonrpc.new_response(request.id, json.encode(users))
|
||||
}
|
||||
Reference in New Issue
Block a user