...
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_delete', calendar_delete)
|
||||||
openrpc_handler.register_procedure_handle('calendar_list', calendar_list)
|
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)!
|
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