93 lines
2.2 KiB
V
93 lines
2.2 KiB
V
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
|
|
)!
|
|
|
|
user_obj=mydb.user.set( user_obj)!
|
|
|
|
return new_response_u32(request.id, user_obj.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))
|
|
}
|