Added SaveCharacter and UpdateSession function stubs
Updated proto message type names to better match usage Fixed compile errors due to type name changes
This commit is contained in:
@@ -14,6 +14,7 @@ fn main() {
|
||||
tonic_build::configure()
|
||||
.build_server(false) // Generate gRPC client code
|
||||
.compile_well_known_types(true)
|
||||
.type_attribute(".", "#[derive(serde::Serialize, serde::Deserialize)]")
|
||||
.compile_protos(
|
||||
&["../proto/character_db_api.proto", "../proto/auth.proto"],
|
||||
&["../proto"],
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
use crate::database::{
|
||||
character_db_service_client::CharacterDbServiceClient, Character, CharacterListRequest, CharacterListResponse,
|
||||
character_db_service_client::CharacterDbServiceClient, CharacterItem, CharacterListRequest, CharacterListResponse,
|
||||
CharacterRequest, CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest, DeleteCharacterResponse,
|
||||
};
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
use tonic::transport::Channel;
|
||||
use crate::character_service::character_common::{Item, ItemHeader};
|
||||
use crate::character_common::{Item, ItemHeader};
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct CharacterDbClient {
|
||||
@@ -17,21 +17,6 @@ struct Skill {
|
||||
id: i32,
|
||||
}
|
||||
|
||||
// #[derive(Debug, Deserialize, Serialize)]
|
||||
// struct Item {
|
||||
// item_id: i32,
|
||||
// item_type: i32,
|
||||
// is_created: i32,
|
||||
// gem_option: i32,
|
||||
// durability: f32,
|
||||
// life: f32,
|
||||
// socket: i8,
|
||||
// is_appraised: i8,
|
||||
// grade: u32,
|
||||
// count: i32,
|
||||
// slot: i32,
|
||||
// }
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
struct Looks {
|
||||
race: i32,
|
||||
@@ -84,7 +69,7 @@ impl CharacterDbClient {
|
||||
&mut self,
|
||||
user_id: &str,
|
||||
char_id: &str,
|
||||
) -> Result<Character, Box<dyn std::error::Error>> {
|
||||
) -> Result<CharacterItem, Box<dyn std::error::Error>> {
|
||||
let request = tonic::Request::new(CharacterRequest {
|
||||
user_id: user_id.parse().unwrap(),
|
||||
character_id: char_id.parse().unwrap(),
|
||||
|
||||
@@ -1,21 +1,11 @@
|
||||
use crate::character_db_client::CharacterDbClient;
|
||||
use crate::character_service::character::character_service_server::CharacterService;
|
||||
use crate::character_service::character::{
|
||||
CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest, DeleteCharacterResponse,
|
||||
GetCharacterListRequest, GetCharacterListResponse, GetCharacterRequest, GetCharacterResponse,
|
||||
};
|
||||
use crate::character_service::character_common::{Character, CharacterFull};
|
||||
use crate::character::character_service_server::CharacterService;
|
||||
use crate::character::{CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest, DeleteCharacterResponse, GetCharacterListRequest, GetCharacterListResponse, GetCharacterRequest, GetCharacterResponse, SaveCharacterRequest, SaveCharacterResponse};
|
||||
use crate::character_common::{Character, CharacterFull, EquippedItem, Item, ItemHeader};
|
||||
use std::sync::Arc;
|
||||
use tonic::{Request, Response, Status};
|
||||
use tracing::debug;
|
||||
|
||||
pub mod character_common {
|
||||
tonic::include_proto!("character_common");
|
||||
}
|
||||
pub mod character {
|
||||
tonic::include_proto!("character");
|
||||
}
|
||||
|
||||
pub struct MyCharacterService {
|
||||
pub character_db_client: Arc<CharacterDbClient>,
|
||||
}
|
||||
@@ -42,11 +32,11 @@ impl CharacterService for MyCharacterService {
|
||||
|
||||
let mut characters: Vec<Character> = vec![];
|
||||
for character in character_list.characters {
|
||||
let mut equipped_items: Vec<character_common::EquippedItem> = vec![];
|
||||
let inventory: Vec<character_common::Item> = serde_json::from_str(&character.inventory).unwrap();
|
||||
let mut equipped_items: Vec<EquippedItem> = vec![];
|
||||
let inventory: Vec<Item> = serde_json::from_str(&character.inventory).unwrap();
|
||||
for item in inventory {
|
||||
if item.slot < 12 {
|
||||
equipped_items.push(character_common::EquippedItem {
|
||||
equipped_items.push(EquippedItem {
|
||||
item_id: item.header.unwrap().id,
|
||||
socket: item.socket,
|
||||
grade: item.grade,
|
||||
@@ -142,4 +132,8 @@ impl CharacterService for MyCharacterService {
|
||||
};
|
||||
Ok(Response::new(response))
|
||||
}
|
||||
|
||||
async fn save_character(&self, request: Request<SaveCharacterRequest>) -> Result<Response<SaveCharacterResponse>, Status> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
pub mod character_db_client;
|
||||
pub mod character_service;
|
||||
pub mod database;
|
||||
@@ -4,8 +4,20 @@ pub mod database {
|
||||
tonic::include_proto!("character_db_api");
|
||||
}
|
||||
|
||||
pub mod common {
|
||||
tonic::include_proto!("common");
|
||||
}
|
||||
|
||||
pub mod character {
|
||||
tonic::include_proto!("character");
|
||||
}
|
||||
|
||||
pub mod character_common {
|
||||
tonic::include_proto!("character_common");
|
||||
}
|
||||
|
||||
use crate::character_db_client::CharacterDbClient;
|
||||
use crate::character_service::character::character_service_server::CharacterServiceServer;
|
||||
use crate::character::character_service_server::CharacterServiceServer;
|
||||
use crate::character_service::MyCharacterService;
|
||||
use dotenv::dotenv;
|
||||
use std::env;
|
||||
|
||||
@@ -5,6 +5,7 @@ fn main() {
|
||||
.type_attribute(".", "#[derive(serde::Serialize, serde::Deserialize)]")
|
||||
.compile_protos(
|
||||
&[
|
||||
"../proto/character_common.proto",
|
||||
"../proto/user_db_api.proto",
|
||||
"../proto/character_db_api.proto",
|
||||
"../proto/session_db_api.proto",
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
use crate::grpc::character_db_service_server::CharacterDbService;
|
||||
use crate::grpc::database_service::MyDatabaseService;
|
||||
use crate::grpc::{
|
||||
Character, CharacterListRequest, CharacterListResponse, CharacterRequest, CreateCharacterRequest,
|
||||
CreateCharacterResponse, DeleteCharacterRequest, DeleteCharacterResponse,
|
||||
};
|
||||
// use crate::character_common::{Character};
|
||||
use crate::grpc::{CharacterItem, CharacterListRequest, CharacterListResponse, CharacterRequest, CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest, DeleteCharacterResponse, SaveCharacterRequest, SaveCharacterResponse};
|
||||
use tonic::{Request, Response, Status};
|
||||
|
||||
#[tonic::async_trait]
|
||||
impl CharacterDbService for MyDatabaseService {
|
||||
async fn get_character(&self, request: Request<CharacterRequest>) -> Result<Response<Character>, Status> {
|
||||
async fn get_character(&self, request: Request<CharacterRequest>) -> Result<Response<CharacterItem>, Status> {
|
||||
let req = request.into_inner();
|
||||
let repo = &self.db.character_repo;
|
||||
|
||||
@@ -22,7 +20,7 @@ impl CharacterDbService for MyDatabaseService {
|
||||
deleted_at = character.deleted_at.unwrap().to_string();
|
||||
}
|
||||
|
||||
let response = Character {
|
||||
let response = CharacterItem {
|
||||
id: character.id,
|
||||
user_id: character.user_id,
|
||||
name: character.name,
|
||||
@@ -53,14 +51,14 @@ impl CharacterDbService for MyDatabaseService {
|
||||
.await
|
||||
.map_err(|_| Status::not_found("Character not found"))?;
|
||||
|
||||
let mut character_list: Vec<Character> = Vec::new();
|
||||
let mut character_list: Vec<CharacterItem> = Vec::new();
|
||||
|
||||
for character in characters {
|
||||
let mut deleted_at = "".to_string();
|
||||
if character.deleted_at.is_some() {
|
||||
deleted_at = character.deleted_at.unwrap_or_default().to_string();
|
||||
}
|
||||
let character = Character {
|
||||
let character = CharacterItem {
|
||||
id: character.id,
|
||||
user_id: character.user_id,
|
||||
name: character.name,
|
||||
@@ -138,4 +136,8 @@ impl CharacterDbService for MyDatabaseService {
|
||||
};
|
||||
Ok(Response::new(response))
|
||||
}
|
||||
|
||||
async fn save_character(&self, request: Request<SaveCharacterRequest>) -> Result<Response<SaveCharacterResponse>, Status> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use crate::grpc::database_service::MyDatabaseService;
|
||||
use crate::grpc::session_service_server::SessionService;
|
||||
use crate::grpc::{GetSessionRequest, GetSessionResponse, RefreshSessionRequest, RefreshSessionResponse};
|
||||
use crate::grpc::{GetSessionRequest, GetSessionResponse, RefreshSessionRequest, RefreshSessionResponse, UpdateSessionRequest, UpdateSessionResponse};
|
||||
use tonic::{Request, Response, Status};
|
||||
use tracing::debug;
|
||||
|
||||
@@ -43,4 +43,8 @@ impl SessionService for MyDatabaseService {
|
||||
debug!("session: {:?}", session);
|
||||
Ok(Response::new(RefreshSessionResponse { valid }))
|
||||
}
|
||||
|
||||
async fn update_session(&self, request: Request<UpdateSessionRequest>) -> Result<Response<UpdateSessionResponse>, Status> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
pub mod characters;
|
||||
pub mod db;
|
||||
pub mod grpc;
|
||||
pub mod sessions;
|
||||
pub mod users;
|
||||
@@ -1,8 +1,15 @@
|
||||
use database_service::db::Database;
|
||||
use database_service::grpc::character_db_service_server::CharacterDbServiceServer;
|
||||
use database_service::grpc::database_service::MyDatabaseService;
|
||||
use database_service::grpc::session_service_server::SessionServiceServer;
|
||||
use database_service::grpc::user_service_server::UserServiceServer;
|
||||
|
||||
pub mod characters;
|
||||
pub mod db;
|
||||
pub mod grpc;
|
||||
pub mod sessions;
|
||||
pub mod users;
|
||||
|
||||
use crate::db::Database;
|
||||
use crate::grpc::character_db_service_server::CharacterDbServiceServer;
|
||||
use crate::grpc::database_service::MyDatabaseService;
|
||||
use crate::grpc::session_service_server::SessionServiceServer;
|
||||
use crate::grpc::user_service_server::UserServiceServer;
|
||||
use dotenv::dotenv;
|
||||
use sqlx::postgres::PgPoolOptions;
|
||||
use std::env;
|
||||
@@ -17,6 +24,10 @@ use tracing_subscriber::EnvFilter;
|
||||
use utils::logging;
|
||||
use utils::redis_cache::RedisCache;
|
||||
|
||||
pub mod character_common {
|
||||
tonic::include_proto!("character_common");
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||
dotenv().ok();
|
||||
|
||||
@@ -9,6 +9,7 @@ service CharacterService {
|
||||
rpc CreateCharacter(CreateCharacterRequest) returns (CreateCharacterResponse);
|
||||
rpc DeleteCharacter(DeleteCharacterRequest) returns (DeleteCharacterResponse);
|
||||
rpc GetCharacter(GetCharacterRequest) returns (GetCharacterResponse);
|
||||
rpc SaveCharacter(SaveCharacterRequest) returns (SaveCharacterResponse);
|
||||
}
|
||||
|
||||
message GetCharacterListRequest {
|
||||
@@ -51,3 +52,12 @@ message GetCharacterRequest {
|
||||
message GetCharacterResponse {
|
||||
character_common.CharacterFull character = 1;
|
||||
}
|
||||
|
||||
message SaveCharacterRequest {
|
||||
string sessions_id = 1;
|
||||
character_common.CharacterFull character = 2;
|
||||
}
|
||||
|
||||
message SaveCharacterResponse {
|
||||
bool success = 1;
|
||||
}
|
||||
@@ -2,11 +2,14 @@ syntax = "proto3";
|
||||
|
||||
package character_db_api;
|
||||
|
||||
import "character_common.proto";
|
||||
|
||||
service CharacterDbService {
|
||||
rpc GetCharacter (CharacterRequest) returns (Character);
|
||||
rpc GetCharacter (CharacterRequest) returns (CharacterItem);
|
||||
rpc GetCharacterList (CharacterListRequest) returns (CharacterListResponse);
|
||||
rpc CreateCharacter (CreateCharacterRequest) returns (CreateCharacterResponse);
|
||||
rpc DeleteCharacter (DeleteCharacterRequest) returns (DeleteCharacterResponse);
|
||||
rpc SaveCharacter (SaveCharacterRequest) returns (SaveCharacterResponse);
|
||||
}
|
||||
|
||||
message CharacterRequest {
|
||||
@@ -18,8 +21,24 @@ message CharacterListRequest {
|
||||
string user_id = 1;
|
||||
}
|
||||
|
||||
message CharacterItem {
|
||||
int32 id = 1;
|
||||
string user_id = 2;
|
||||
string name = 3;
|
||||
int64 money = 4;
|
||||
string inventory = 6;
|
||||
string stats = 7;
|
||||
string skills = 8;
|
||||
string looks = 9;
|
||||
string position = 10;
|
||||
string created_at = 11;
|
||||
string updated_at = 12;
|
||||
string deleted_at = 13;
|
||||
bool is_active = 14;
|
||||
}
|
||||
|
||||
message CharacterListResponse {
|
||||
repeated Character characters = 1;
|
||||
repeated CharacterItem characters = 1;
|
||||
}
|
||||
|
||||
message CreateCharacterRequest {
|
||||
@@ -48,18 +67,11 @@ message DeleteCharacterResponse {
|
||||
string name = 2;
|
||||
}
|
||||
|
||||
message Character {
|
||||
int32 id = 1;
|
||||
string user_id = 2;
|
||||
string name = 3;
|
||||
int64 money = 4;
|
||||
string inventory = 6;
|
||||
string stats = 7;
|
||||
string skills = 8;
|
||||
string looks = 9;
|
||||
string position = 10;
|
||||
string created_at = 11;
|
||||
string updated_at = 12;
|
||||
string deleted_at = 13;
|
||||
bool is_active = 14;
|
||||
message SaveCharacterRequest {
|
||||
string session_id = 1;
|
||||
character_common.CharacterFull character = 2;
|
||||
}
|
||||
|
||||
message SaveCharacterResponse {
|
||||
bool success = 1;
|
||||
}
|
||||
@@ -5,6 +5,7 @@ package session_db_api;
|
||||
service SessionService {
|
||||
rpc GetSession(GetSessionRequest) returns (GetSessionResponse);
|
||||
rpc RefreshSession(RefreshSessionRequest) returns (RefreshSessionResponse);
|
||||
rpc UpdateSession(UpdateSessionRequest) returns (UpdateSessionResponse);
|
||||
}
|
||||
|
||||
message GetSessionRequest {
|
||||
@@ -23,3 +24,15 @@ message RefreshSessionRequest {
|
||||
message RefreshSessionResponse {
|
||||
bool valid = 1;
|
||||
}
|
||||
|
||||
message UpdateSessionRequest {
|
||||
string session_id = 1;
|
||||
string user_id = 2;
|
||||
string character_id = 3;
|
||||
string map_id = 4;
|
||||
string client_id = 5;
|
||||
}
|
||||
|
||||
message UpdateSessionResponse {
|
||||
bool success = 1;
|
||||
}
|
||||
Reference in New Issue
Block a user