made progress on user
This commit is contained in:
parent
4588a50d75
commit
f039b9a6e1
5 changed files with 285 additions and 62 deletions
|
@ -53,6 +53,42 @@ pub struct MessageSetContent {
|
||||||
pub content: String,
|
pub content: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct UserList {}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct UserCreate {
|
||||||
|
pub name: String,
|
||||||
|
pub pass: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct UserDelete {
|
||||||
|
pub id: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct UserGetName {
|
||||||
|
pub id: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct UserSetName {
|
||||||
|
pub id: u64,
|
||||||
|
pub name: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct UserGetPass {
|
||||||
|
pub id: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct UserSetPass {
|
||||||
|
pub id: u64,
|
||||||
|
pub pass: String,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum ClientRequest {
|
pub enum ClientRequest {
|
||||||
Ping(Ping),
|
Ping(Ping),
|
||||||
|
@ -61,11 +97,19 @@ pub enum ClientRequest {
|
||||||
ChannelDelete(ChannelDelete),
|
ChannelDelete(ChannelDelete),
|
||||||
ChannelGetName(ChannelGetName),
|
ChannelGetName(ChannelGetName),
|
||||||
ChannelSetName(ChannelSetName),
|
ChannelSetName(ChannelSetName),
|
||||||
|
|
||||||
MessageList(MessageList),
|
MessageList(MessageList),
|
||||||
MessageCreate(MessageCreate),
|
MessageCreate(MessageCreate),
|
||||||
MessageDelete(MessageDelete),
|
MessageDelete(MessageDelete),
|
||||||
MessageGetContent(MessageGetContent),
|
MessageGetContent(MessageGetContent),
|
||||||
MessageSetContent(MessageSetContent),
|
MessageSetContent(MessageSetContent),
|
||||||
|
|
||||||
|
UserList(UserList),
|
||||||
|
UserCreate(UserCreate),
|
||||||
|
UserDelete(UserDelete),
|
||||||
|
UserGetName(UserGetName),
|
||||||
|
UserSetName(UserSetName),
|
||||||
|
UserSetPass(UserSetPass),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ClientRequest {
|
impl ClientRequest {
|
||||||
|
@ -162,6 +206,12 @@ impl ClientRequest {
|
||||||
id,
|
id,
|
||||||
channel_id,
|
channel_id,
|
||||||
}),
|
}),
|
||||||
|
user_list {} => Self::UserList(UserList {}),
|
||||||
|
user_create { name, pass } => Self::UserCreate(UserCreate { name, pass }),
|
||||||
|
user_delete { id } => Self::UserDelete(UserDelete { id }),
|
||||||
|
user_get_name { id } => Self::UserGetName(UserGetName { id }),
|
||||||
|
user_set_name { id, name } => Self::UserSetName(UserSetName { id, name }),
|
||||||
|
user_set_pass { id, pass } => Self::UserSetPass(UserSetPass { id, pass }),
|
||||||
};
|
};
|
||||||
Some(mapped)
|
Some(mapped)
|
||||||
}
|
}
|
||||||
|
@ -208,6 +258,12 @@ impl ClientRequest {
|
||||||
channel_id,
|
channel_id,
|
||||||
content,
|
content,
|
||||||
},
|
},
|
||||||
|
Self::UserList(UserList {}) => user_list {},
|
||||||
|
Self::UserCreate(UserCreate { name, pass }) => user_create { name, pass },
|
||||||
|
Self::UserDelete(UserDelete { id }) => user_delete { id },
|
||||||
|
Self::UserGetName(UserGetName { id }) => user_get_name { id },
|
||||||
|
Self::UserSetName(UserSetName { id, name }) => user_set_name { id, name },
|
||||||
|
Self::UserSetPass(UserSetPass { id, pass }) => user_set_pass { id, pass },
|
||||||
};
|
};
|
||||||
serde_json::to_string(&mapped).unwrap()
|
serde_json::to_string(&mapped).unwrap()
|
||||||
}
|
}
|
||||||
|
@ -258,5 +314,24 @@ mod repr {
|
||||||
id: u64,
|
id: u64,
|
||||||
content: String,
|
content: String,
|
||||||
},
|
},
|
||||||
|
user_list {},
|
||||||
|
user_create {
|
||||||
|
name: String,
|
||||||
|
pass: String,
|
||||||
|
},
|
||||||
|
user_delete {
|
||||||
|
id: u64,
|
||||||
|
},
|
||||||
|
user_get_name {
|
||||||
|
id: u64,
|
||||||
|
},
|
||||||
|
user_set_name {
|
||||||
|
id: u64,
|
||||||
|
name: String,
|
||||||
|
},
|
||||||
|
user_set_pass {
|
||||||
|
id: u64,
|
||||||
|
pass: String,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,19 +60,59 @@ pub struct MessageSetContent {
|
||||||
pub content: String,
|
pub content: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct UserList {}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct UserCreate {
|
||||||
|
pub id: u64,
|
||||||
|
pub name: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct UserDelete {
|
||||||
|
pub id: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct UserGetName {
|
||||||
|
pub id: u64,
|
||||||
|
pub name: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct UserSetName {
|
||||||
|
pub id: u64,
|
||||||
|
pub name: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct UserSetPass {
|
||||||
|
pub id: u64,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum ServerRequest {
|
pub enum ServerRequest {
|
||||||
Pong(Pong),
|
Pong(Pong),
|
||||||
|
|
||||||
ChannelCreate(ChannelCreate),
|
ChannelCreate(ChannelCreate),
|
||||||
ChannelDelete(ChannelDelete),
|
ChannelDelete(ChannelDelete),
|
||||||
ChannelList(ChannelList),
|
ChannelList(ChannelList),
|
||||||
ChannelGetName(ChannelGetName),
|
ChannelGetName(ChannelGetName),
|
||||||
ChannelSetName(ChannelSetName),
|
ChannelSetName(ChannelSetName),
|
||||||
|
|
||||||
MessageList(MessageList),
|
MessageList(MessageList),
|
||||||
MessageCreate(MessageCreate),
|
MessageCreate(MessageCreate),
|
||||||
MessageDelete(MessageDelete),
|
MessageDelete(MessageDelete),
|
||||||
MessageGetContent(MessageGetContent),
|
MessageGetContent(MessageGetContent),
|
||||||
MessageSetContent(MessageSetContent),
|
MessageSetContent(MessageSetContent),
|
||||||
|
|
||||||
|
UserList(UserList),
|
||||||
|
UserCreate(UserCreate),
|
||||||
|
UserDelete(UserDelete),
|
||||||
|
UserGetName(UserGetName),
|
||||||
|
UserSetName(UserSetName),
|
||||||
|
UserSetPass(UserSetPass),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ServerRequest {
|
impl ServerRequest {
|
||||||
|
@ -181,6 +221,12 @@ impl ServerRequest {
|
||||||
content,
|
content,
|
||||||
id,
|
id,
|
||||||
}),
|
}),
|
||||||
|
user_list {} => Self::UserList(UserList {}),
|
||||||
|
user_create { id, name } => Self::UserCreate(UserCreate { id, name }),
|
||||||
|
user_delete { id } => Self::UserDelete(UserDelete { id }),
|
||||||
|
user_get_name { id, name } => Self::UserGetName(UserGetName { id, name }),
|
||||||
|
user_set_name { id, name } => Self::UserSetName(UserSetName { id, name }),
|
||||||
|
user_set_pass { id } => Self::UserSetPass(UserSetPass { id }),
|
||||||
};
|
};
|
||||||
Some(mapped)
|
Some(mapped)
|
||||||
}
|
}
|
||||||
|
@ -232,7 +278,14 @@ impl ServerRequest {
|
||||||
id,
|
id,
|
||||||
content,
|
content,
|
||||||
},
|
},
|
||||||
|
Self::UserList(UserList {}) => user_list {},
|
||||||
|
Self::UserCreate(UserCreate { id, name }) => user_create { id, name },
|
||||||
|
Self::UserDelete(UserDelete { id }) => user_delete { id },
|
||||||
|
Self::UserGetName(UserGetName { id, name }) => user_get_name { id, name },
|
||||||
|
Self::UserSetName(UserSetName { id, name }) => user_set_name { id, name },
|
||||||
|
Self::UserSetPass(UserSetPass { id }) => user_set_pass { id },
|
||||||
};
|
};
|
||||||
|
|
||||||
serde_json::to_string(&mapped).unwrap()
|
serde_json::to_string(&mapped).unwrap()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -289,5 +342,24 @@ mod repr {
|
||||||
id: u64,
|
id: u64,
|
||||||
content: String,
|
content: String,
|
||||||
},
|
},
|
||||||
|
user_list {},
|
||||||
|
user_create {
|
||||||
|
id: u64,
|
||||||
|
name: String,
|
||||||
|
},
|
||||||
|
user_delete {
|
||||||
|
id: u64,
|
||||||
|
},
|
||||||
|
user_get_name {
|
||||||
|
id: u64,
|
||||||
|
name: Option<String>,
|
||||||
|
},
|
||||||
|
user_set_name {
|
||||||
|
id: u64,
|
||||||
|
name: String,
|
||||||
|
},
|
||||||
|
user_set_pass {
|
||||||
|
id: u64,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,56 +16,58 @@ pub struct GatewayProc {
|
||||||
|
|
||||||
impl GatewayProc {
|
impl GatewayProc {
|
||||||
async fn handle_request(&mut self, address: Addr, request: ClientRequest) {
|
async fn handle_request(&mut self, address: Addr, request: ClientRequest) {
|
||||||
|
use client as c;
|
||||||
|
use ClientRequest::*;
|
||||||
match request {
|
match request {
|
||||||
ClientRequest::Ping(client::Ping { content }) => {
|
Ping(c::Ping { content }) => self.on_ping(content, address),
|
||||||
self.on_ping(content, address);
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientRequest::ChannelCreate(client::ChannelCreate { name }) => {
|
ChannelCreate(c::ChannelCreate { name }) => self.on_channel_create(name).await,
|
||||||
self.on_channel_create(name).await;
|
ChannelDelete(c::ChannelDelete { id }) => self.on_channel_delete(id),
|
||||||
}
|
ChannelList(c::ChannelList {}) => self.on_channel_list(address).await,
|
||||||
|
ChannelGetName(c::ChannelGetName { id }) => self.on_channel_get_name(id, address).await,
|
||||||
|
ChannelSetName(c::ChannelSetName { id, name }) => self.on_channel_set_name(id, name),
|
||||||
|
|
||||||
ClientRequest::ChannelDelete(client::ChannelDelete { id }) => {
|
MessageList(c::MessageList { channel_id }) => {
|
||||||
self.on_channel_delete(id);
|
self.on_message_list(channel_id, address).await
|
||||||
}
|
}
|
||||||
|
MessageCreate(c::MessageCreate {
|
||||||
ClientRequest::ChannelList(client::ChannelList {}) => {
|
|
||||||
self.on_channel_list(address).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientRequest::ChannelGetName(client::ChannelGetName { id }) => {
|
|
||||||
self.on_channel_get_name(id, address).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientRequest::ChannelSetName(client::ChannelSetName { id, name }) => {
|
|
||||||
self.on_channel_set_name(id, name);
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientRequest::MessageList(client::MessageList { channel_id }) => {
|
|
||||||
self.on_message_list(channel_id, address).await;
|
|
||||||
}
|
|
||||||
ClientRequest::MessageCreate(client::MessageCreate {
|
|
||||||
channel_id,
|
channel_id,
|
||||||
content,
|
content,
|
||||||
}) => {
|
}) => self.on_message_create(channel_id, content).await,
|
||||||
self.on_message_create(channel_id, content).await;
|
MessageDelete(c::MessageDelete { channel_id, id }) => {
|
||||||
|
self.on_message_delete(channel_id, id)
|
||||||
|
}
|
||||||
|
MessageGetContent(c::MessageGetContent { channel_id, id }) => {
|
||||||
|
self.on_message_get_content(channel_id, id, address).await
|
||||||
}
|
}
|
||||||
|
|
||||||
ClientRequest::MessageDelete(client::MessageDelete { id, channel_id }) => {
|
MessageSetContent(c::MessageSetContent {
|
||||||
self.on_message_delete(channel_id, id);
|
channel_id,
|
||||||
}
|
|
||||||
|
|
||||||
ClientRequest::MessageGetContent(client::MessageGetContent { id, channel_id }) => {
|
|
||||||
self.on_message_get_content(channel_id, id, address).await;
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientRequest::MessageSetContent(client::MessageSetContent {
|
|
||||||
content,
|
|
||||||
id,
|
id,
|
||||||
channel_id,
|
content,
|
||||||
}) => {
|
}) => {
|
||||||
self.on_message_set_content(channel_id, id, content);
|
self.on_message_set_content(channel_id, id, content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: user
|
||||||
|
UserList(c::UserList {}) => {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
UserCreate(c::UserCreate { name, pass }) => {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
UserDelete(c::UserDelete { id }) => {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
UserGetName(c::UserGetName { id }) => {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
UserSetName(c::UserSetName { id, name }) => {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
UserSetPass(c::UserSetPass { id, pass }) => {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,13 @@ pub enum StorageCmd {
|
||||||
MessageDelete(Id, Id),
|
MessageDelete(Id, Id),
|
||||||
MessageGetContent(Id, Id, Sender<Option<String>>),
|
MessageGetContent(Id, Id, Sender<Option<String>>),
|
||||||
MessageSetContent(Id, Id, String),
|
MessageSetContent(Id, Id, String),
|
||||||
|
UserList(Sender<Vec<Id>>),
|
||||||
|
UserCreate(String, String, Sender<Id>),
|
||||||
|
UserDelete(Id),
|
||||||
|
UserGetName(Id, Sender<Option<String>>),
|
||||||
|
UserSetName(Id, String),
|
||||||
|
UserGetPass(Id, Sender<Option<String>>),
|
||||||
|
UserSetPass(Id, String),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl StorageCmd {
|
impl StorageCmd {
|
||||||
|
@ -121,37 +128,77 @@ impl StorageProc {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn handle_command(&mut self, command: StorageCmd) {
|
async fn handle_command(&mut self, command: StorageCmd) {
|
||||||
|
use StorageCmd::*;
|
||||||
match command {
|
match command {
|
||||||
StorageCmd::ChannelList(sender) => {
|
//
|
||||||
self.on_channel_list(sender);
|
// Channel
|
||||||
}
|
//
|
||||||
StorageCmd::ChannelCreate(name, sender) => {
|
ChannelList(sender) => self.on_channel_list(sender),
|
||||||
self.on_channel_create(name, sender);
|
ChannelCreate(name, sender) => self.on_channel_create(name, sender),
|
||||||
}
|
ChannelDelete(id) => self.on_channel_remove(id),
|
||||||
StorageCmd::ChannelDelete(id) => self.on_channel_remove(id),
|
ChannelGetName(id, sender) => self.on_channel_get_name(id, sender),
|
||||||
StorageCmd::ChannelGetName(id, sender) => {
|
ChannelSetName(id, name) => self.on_channel_set_name(id, name),
|
||||||
self.on_channel_get_name(id, sender);
|
|
||||||
}
|
|
||||||
StorageCmd::ChannelSetName(id, name) => {
|
|
||||||
self.on_channel_set_name(id, name);
|
|
||||||
}
|
|
||||||
// ChannelGetParent / Set
|
// ChannelGetParent / Set
|
||||||
|
|
||||||
//
|
//
|
||||||
StorageCmd::MessageList(channel_id, sender) => {
|
// User
|
||||||
self.on_message_list(channel_id, sender);
|
//
|
||||||
|
MessageList(channel_id, sender) => self.on_message_list(channel_id, sender),
|
||||||
|
MessageCreate(channel_id, content, sender) => {
|
||||||
|
self.on_message_create(channel_id, content, sender)
|
||||||
}
|
}
|
||||||
StorageCmd::MessageCreate(channel_id, content, sender) => {
|
MessageDelete(channel_id, id) => self.on_message_delete(channel_id, id),
|
||||||
self.on_message_create(channel_id, content, sender);
|
MessageGetContent(channel_id, id, sender) => {
|
||||||
|
self.on_message_get_content(channel_id, id, sender)
|
||||||
}
|
}
|
||||||
StorageCmd::MessageDelete(channel_id, id) => {
|
MessageSetContent(channel_id, id, content) => {
|
||||||
self.on_message_delete(channel_id, id);
|
self.on_message_set_content(channel_id, id, content)
|
||||||
}
|
}
|
||||||
StorageCmd::MessageGetContent(channel_id, id, sender) => {
|
|
||||||
self.on_message_get_content(channel_id, id, sender);
|
//
|
||||||
|
// User
|
||||||
|
//
|
||||||
|
UserList(sender) => {
|
||||||
|
let users = self.list("/users/");
|
||||||
|
sender.send(users).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserCreate(name, pass, sender) => {
|
||||||
|
let user = User::new(name, pass);
|
||||||
|
let id = user.get_id();
|
||||||
|
sender.send(id).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserDelete(id) => {
|
||||||
|
self.remove(format!("/users/{id}"));
|
||||||
|
}
|
||||||
|
|
||||||
|
UserGetName(id, sender) => {
|
||||||
|
let user = self.get::<_, User>(format!("/users/{id}"));
|
||||||
|
let name = user.map(|u| u.get_name().to_string());
|
||||||
|
sender.send(name).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserSetName(id, name) => {
|
||||||
|
let path = format!("/users/{id}");
|
||||||
|
if let Some(mut user) = self.get::<_, User>(&path) {
|
||||||
|
user.set_name(name);
|
||||||
|
self.set(path, user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UserGetPass(id, sender) => {
|
||||||
|
let user = self.get::<_, User>(format!("/users/{id}"));
|
||||||
|
let name = user.map(|u| u.get_pass().to_string());
|
||||||
|
sender.send(name).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
UserSetPass(id, pass) => {
|
||||||
|
let path = format!("/users/{id}");
|
||||||
|
if let Some(mut user) = self.get::<_, User>(&path) {
|
||||||
|
user.set_pass(pass);
|
||||||
|
self.set(path, user);
|
||||||
}
|
}
|
||||||
StorageCmd::MessageSetContent(channel_id, id, content) => {
|
|
||||||
self.on_message_set_content(channel_id, id, content);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -192,7 +239,6 @@ impl StorageProc {
|
||||||
//
|
//
|
||||||
// Messages
|
// Messages
|
||||||
//
|
//
|
||||||
|
|
||||||
fn on_message_list(&mut self, channel_id: Id, sender: Sender<Vec<Id>>) {
|
fn on_message_list(&mut self, channel_id: Id, sender: Sender<Vec<Id>>) {
|
||||||
let items = self.list(format!("/messages/{channel_id}/"));
|
let items = self.list(format!("/messages/{channel_id}/"));
|
||||||
sender.send(items).unwrap();
|
sender.send(items).unwrap();
|
||||||
|
|
|
@ -32,6 +32,34 @@ impl Channel {
|
||||||
pub struct User {
|
pub struct User {
|
||||||
id: Id,
|
id: Id,
|
||||||
name: String,
|
name: String,
|
||||||
|
pass: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl User {
|
||||||
|
pub fn new(name: String, pass: String) -> Self {
|
||||||
|
let id = Id::from_now();
|
||||||
|
Self { id, name, pass }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_id(&self) -> Id {
|
||||||
|
self.id
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_name(&self) -> &str {
|
||||||
|
&self.name
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_name(&mut self, name: String) {
|
||||||
|
self.name = name
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_pass(&self) -> &str {
|
||||||
|
&self.pass
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn set_pass(&mut self, pass: String) {
|
||||||
|
self.pass = pass
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Serialize, Deserialize)]
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue