From a20a44fd29f494202d2f4ec822d8ad1bf8faec1081a3a48fd2831d93a0fe1196 Mon Sep 17 00:00:00 2001 From: raven <7156279+RavenX8@users.noreply.github.com> Date: Tue, 22 Jul 2025 00:17:32 -0400 Subject: [PATCH] Added SaveCharacter and UpdateSession function stubs Updated proto message type names to better match usage Fixed compile errors due to type name changes --- character-service/build.rs | 1 + character-service/src/character_db_client.rs | 21 ++------- character-service/src/character_service.rs | 26 +++++------ character-service/src/lib.rs | 3 -- character-service/src/main.rs | 14 +++++- database-service/build.rs | 1 + .../src/grpc/character_service.rs | 18 ++++---- database-service/src/grpc/session_service.rs | 6 ++- database-service/src/lib.rs | 5 --- database-service/src/main.rs | 21 ++++++--- proto/character.proto | 10 +++++ proto/character_db_api.proto | 44 ++++++++++++------- proto/session_db_api.proto | 13 ++++++ 13 files changed, 110 insertions(+), 73 deletions(-) delete mode 100644 character-service/src/lib.rs delete mode 100644 database-service/src/lib.rs diff --git a/character-service/build.rs b/character-service/build.rs index 1c86073..75553c4 100644 --- a/character-service/build.rs +++ b/character-service/build.rs @@ -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"], diff --git a/character-service/src/character_db_client.rs b/character-service/src/character_db_client.rs index 312cd0c..7c28f2e 100644 --- a/character-service/src/character_db_client.rs +++ b/character-service/src/character_db_client.rs @@ -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> { + ) -> Result> { let request = tonic::Request::new(CharacterRequest { user_id: user_id.parse().unwrap(), character_id: char_id.parse().unwrap(), diff --git a/character-service/src/character_service.rs b/character-service/src/character_service.rs index 3f2495b..9cc20a2 100644 --- a/character-service/src/character_service.rs +++ b/character-service/src/character_service.rs @@ -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, } @@ -42,11 +32,11 @@ impl CharacterService for MyCharacterService { let mut characters: Vec = vec![]; for character in character_list.characters { - let mut equipped_items: Vec = vec![]; - let inventory: Vec = serde_json::from_str(&character.inventory).unwrap(); + let mut equipped_items: Vec = vec![]; + let inventory: Vec = 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) -> Result, Status> { + todo!() + } } diff --git a/character-service/src/lib.rs b/character-service/src/lib.rs deleted file mode 100644 index d25e99c..0000000 --- a/character-service/src/lib.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod character_db_client; -pub mod character_service; -pub mod database; diff --git a/character-service/src/main.rs b/character-service/src/main.rs index 4ed3f85..93fbad4 100644 --- a/character-service/src/main.rs +++ b/character-service/src/main.rs @@ -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; diff --git a/database-service/build.rs b/database-service/build.rs index 27e62f4..fc9992c 100644 --- a/database-service/build.rs +++ b/database-service/build.rs @@ -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", diff --git a/database-service/src/grpc/character_service.rs b/database-service/src/grpc/character_service.rs index 3e3ab31..5033e19 100644 --- a/database-service/src/grpc/character_service.rs +++ b/database-service/src/grpc/character_service.rs @@ -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) -> Result, Status> { + async fn get_character(&self, request: Request) -> Result, 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 = Vec::new(); + let mut character_list: Vec = 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) -> Result, Status> { + todo!() + } } diff --git a/database-service/src/grpc/session_service.rs b/database-service/src/grpc/session_service.rs index 7d1aaf2..9e9633e 100644 --- a/database-service/src/grpc/session_service.rs +++ b/database-service/src/grpc/session_service.rs @@ -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) -> Result, Status> { + todo!() + } } diff --git a/database-service/src/lib.rs b/database-service/src/lib.rs deleted file mode 100644 index ab6ac03..0000000 --- a/database-service/src/lib.rs +++ /dev/null @@ -1,5 +0,0 @@ -pub mod characters; -pub mod db; -pub mod grpc; -pub mod sessions; -pub mod users; diff --git a/database-service/src/main.rs b/database-service/src/main.rs index 136bb65..0ffc516 100644 --- a/database-service/src/main.rs +++ b/database-service/src/main.rs @@ -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> { dotenv().ok(); diff --git a/proto/character.proto b/proto/character.proto index 01ffdaf..d7bba28 100644 --- a/proto/character.proto +++ b/proto/character.proto @@ -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; +} \ No newline at end of file diff --git a/proto/character_db_api.proto b/proto/character_db_api.proto index 60b6631..13f62b3 100644 --- a/proto/character_db_api.proto +++ b/proto/character_db_api.proto @@ -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; +} \ No newline at end of file diff --git a/proto/session_db_api.proto b/proto/session_db_api.proto index 56e565d..43c3ca2 100644 --- a/proto/session_db_api.proto +++ b/proto/session_db_api.proto @@ -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 { @@ -22,4 +23,16 @@ 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; } \ No newline at end of file