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()
|
tonic_build::configure()
|
||||||
.build_server(false) // Generate gRPC client code
|
.build_server(false) // Generate gRPC client code
|
||||||
.compile_well_known_types(true)
|
.compile_well_known_types(true)
|
||||||
|
.type_attribute(".", "#[derive(serde::Serialize, serde::Deserialize)]")
|
||||||
.compile_protos(
|
.compile_protos(
|
||||||
&["../proto/character_db_api.proto", "../proto/auth.proto"],
|
&["../proto/character_db_api.proto", "../proto/auth.proto"],
|
||||||
&["../proto"],
|
&["../proto"],
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
use crate::database::{
|
use crate::database::{
|
||||||
character_db_service_client::CharacterDbServiceClient, Character, CharacterListRequest, CharacterListResponse,
|
character_db_service_client::CharacterDbServiceClient, CharacterItem, CharacterListRequest, CharacterListResponse,
|
||||||
CharacterRequest, CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest, DeleteCharacterResponse,
|
CharacterRequest, CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest, DeleteCharacterResponse,
|
||||||
};
|
};
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
use tonic::transport::Channel;
|
use tonic::transport::Channel;
|
||||||
use crate::character_service::character_common::{Item, ItemHeader};
|
use crate::character_common::{Item, ItemHeader};
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct CharacterDbClient {
|
pub struct CharacterDbClient {
|
||||||
@@ -17,21 +17,6 @@ struct Skill {
|
|||||||
id: i32,
|
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)]
|
#[derive(Debug, Deserialize, Serialize)]
|
||||||
struct Looks {
|
struct Looks {
|
||||||
race: i32,
|
race: i32,
|
||||||
@@ -84,7 +69,7 @@ impl CharacterDbClient {
|
|||||||
&mut self,
|
&mut self,
|
||||||
user_id: &str,
|
user_id: &str,
|
||||||
char_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 {
|
let request = tonic::Request::new(CharacterRequest {
|
||||||
user_id: user_id.parse().unwrap(),
|
user_id: user_id.parse().unwrap(),
|
||||||
character_id: char_id.parse().unwrap(),
|
character_id: char_id.parse().unwrap(),
|
||||||
|
|||||||
@@ -1,21 +1,11 @@
|
|||||||
use crate::character_db_client::CharacterDbClient;
|
use crate::character_db_client::CharacterDbClient;
|
||||||
use crate::character_service::character::character_service_server::CharacterService;
|
use crate::character::character_service_server::CharacterService;
|
||||||
use crate::character_service::character::{
|
use crate::character::{CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest, DeleteCharacterResponse, GetCharacterListRequest, GetCharacterListResponse, GetCharacterRequest, GetCharacterResponse, SaveCharacterRequest, SaveCharacterResponse};
|
||||||
CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest, DeleteCharacterResponse,
|
use crate::character_common::{Character, CharacterFull, EquippedItem, Item, ItemHeader};
|
||||||
GetCharacterListRequest, GetCharacterListResponse, GetCharacterRequest, GetCharacterResponse,
|
|
||||||
};
|
|
||||||
use crate::character_service::character_common::{Character, CharacterFull};
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tonic::{Request, Response, Status};
|
use tonic::{Request, Response, Status};
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
|
|
||||||
pub mod character_common {
|
|
||||||
tonic::include_proto!("character_common");
|
|
||||||
}
|
|
||||||
pub mod character {
|
|
||||||
tonic::include_proto!("character");
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct MyCharacterService {
|
pub struct MyCharacterService {
|
||||||
pub character_db_client: Arc<CharacterDbClient>,
|
pub character_db_client: Arc<CharacterDbClient>,
|
||||||
}
|
}
|
||||||
@@ -42,11 +32,11 @@ impl CharacterService for MyCharacterService {
|
|||||||
|
|
||||||
let mut characters: Vec<Character> = vec![];
|
let mut characters: Vec<Character> = vec![];
|
||||||
for character in character_list.characters {
|
for character in character_list.characters {
|
||||||
let mut equipped_items: Vec<character_common::EquippedItem> = vec![];
|
let mut equipped_items: Vec<EquippedItem> = vec![];
|
||||||
let inventory: Vec<character_common::Item> = serde_json::from_str(&character.inventory).unwrap();
|
let inventory: Vec<Item> = serde_json::from_str(&character.inventory).unwrap();
|
||||||
for item in inventory {
|
for item in inventory {
|
||||||
if item.slot < 12 {
|
if item.slot < 12 {
|
||||||
equipped_items.push(character_common::EquippedItem {
|
equipped_items.push(EquippedItem {
|
||||||
item_id: item.header.unwrap().id,
|
item_id: item.header.unwrap().id,
|
||||||
socket: item.socket,
|
socket: item.socket,
|
||||||
grade: item.grade,
|
grade: item.grade,
|
||||||
@@ -142,4 +132,8 @@ impl CharacterService for MyCharacterService {
|
|||||||
};
|
};
|
||||||
Ok(Response::new(response))
|
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");
|
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_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 crate::character_service::MyCharacterService;
|
||||||
use dotenv::dotenv;
|
use dotenv::dotenv;
|
||||||
use std::env;
|
use std::env;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ fn main() {
|
|||||||
.type_attribute(".", "#[derive(serde::Serialize, serde::Deserialize)]")
|
.type_attribute(".", "#[derive(serde::Serialize, serde::Deserialize)]")
|
||||||
.compile_protos(
|
.compile_protos(
|
||||||
&[
|
&[
|
||||||
|
"../proto/character_common.proto",
|
||||||
"../proto/user_db_api.proto",
|
"../proto/user_db_api.proto",
|
||||||
"../proto/character_db_api.proto",
|
"../proto/character_db_api.proto",
|
||||||
"../proto/session_db_api.proto",
|
"../proto/session_db_api.proto",
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
use crate::grpc::character_db_service_server::CharacterDbService;
|
use crate::grpc::character_db_service_server::CharacterDbService;
|
||||||
use crate::grpc::database_service::MyDatabaseService;
|
use crate::grpc::database_service::MyDatabaseService;
|
||||||
use crate::grpc::{
|
// use crate::character_common::{Character};
|
||||||
Character, CharacterListRequest, CharacterListResponse, CharacterRequest, CreateCharacterRequest,
|
use crate::grpc::{CharacterItem, CharacterListRequest, CharacterListResponse, CharacterRequest, CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest, DeleteCharacterResponse, SaveCharacterRequest, SaveCharacterResponse};
|
||||||
CreateCharacterResponse, DeleteCharacterRequest, DeleteCharacterResponse,
|
|
||||||
};
|
|
||||||
use tonic::{Request, Response, Status};
|
use tonic::{Request, Response, Status};
|
||||||
|
|
||||||
#[tonic::async_trait]
|
#[tonic::async_trait]
|
||||||
impl CharacterDbService for MyDatabaseService {
|
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 req = request.into_inner();
|
||||||
let repo = &self.db.character_repo;
|
let repo = &self.db.character_repo;
|
||||||
|
|
||||||
@@ -22,7 +20,7 @@ impl CharacterDbService for MyDatabaseService {
|
|||||||
deleted_at = character.deleted_at.unwrap().to_string();
|
deleted_at = character.deleted_at.unwrap().to_string();
|
||||||
}
|
}
|
||||||
|
|
||||||
let response = Character {
|
let response = CharacterItem {
|
||||||
id: character.id,
|
id: character.id,
|
||||||
user_id: character.user_id,
|
user_id: character.user_id,
|
||||||
name: character.name,
|
name: character.name,
|
||||||
@@ -53,14 +51,14 @@ impl CharacterDbService for MyDatabaseService {
|
|||||||
.await
|
.await
|
||||||
.map_err(|_| Status::not_found("Character not found"))?;
|
.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 {
|
for character in characters {
|
||||||
let mut deleted_at = "".to_string();
|
let mut deleted_at = "".to_string();
|
||||||
if character.deleted_at.is_some() {
|
if character.deleted_at.is_some() {
|
||||||
deleted_at = character.deleted_at.unwrap_or_default().to_string();
|
deleted_at = character.deleted_at.unwrap_or_default().to_string();
|
||||||
}
|
}
|
||||||
let character = Character {
|
let character = CharacterItem {
|
||||||
id: character.id,
|
id: character.id,
|
||||||
user_id: character.user_id,
|
user_id: character.user_id,
|
||||||
name: character.name,
|
name: character.name,
|
||||||
@@ -138,4 +136,8 @@ impl CharacterDbService for MyDatabaseService {
|
|||||||
};
|
};
|
||||||
Ok(Response::new(response))
|
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::database_service::MyDatabaseService;
|
||||||
use crate::grpc::session_service_server::SessionService;
|
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 tonic::{Request, Response, Status};
|
||||||
use tracing::debug;
|
use tracing::debug;
|
||||||
|
|
||||||
@@ -43,4 +43,8 @@ impl SessionService for MyDatabaseService {
|
|||||||
debug!("session: {:?}", session);
|
debug!("session: {:?}", session);
|
||||||
Ok(Response::new(RefreshSessionResponse { valid }))
|
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;
|
pub mod characters;
|
||||||
use database_service::grpc::database_service::MyDatabaseService;
|
pub mod db;
|
||||||
use database_service::grpc::session_service_server::SessionServiceServer;
|
pub mod grpc;
|
||||||
use database_service::grpc::user_service_server::UserServiceServer;
|
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 dotenv::dotenv;
|
||||||
use sqlx::postgres::PgPoolOptions;
|
use sqlx::postgres::PgPoolOptions;
|
||||||
use std::env;
|
use std::env;
|
||||||
@@ -17,6 +24,10 @@ use tracing_subscriber::EnvFilter;
|
|||||||
use utils::logging;
|
use utils::logging;
|
||||||
use utils::redis_cache::RedisCache;
|
use utils::redis_cache::RedisCache;
|
||||||
|
|
||||||
|
pub mod character_common {
|
||||||
|
tonic::include_proto!("character_common");
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
dotenv().ok();
|
dotenv().ok();
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ service CharacterService {
|
|||||||
rpc CreateCharacter(CreateCharacterRequest) returns (CreateCharacterResponse);
|
rpc CreateCharacter(CreateCharacterRequest) returns (CreateCharacterResponse);
|
||||||
rpc DeleteCharacter(DeleteCharacterRequest) returns (DeleteCharacterResponse);
|
rpc DeleteCharacter(DeleteCharacterRequest) returns (DeleteCharacterResponse);
|
||||||
rpc GetCharacter(GetCharacterRequest) returns (GetCharacterResponse);
|
rpc GetCharacter(GetCharacterRequest) returns (GetCharacterResponse);
|
||||||
|
rpc SaveCharacter(SaveCharacterRequest) returns (SaveCharacterResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
message GetCharacterListRequest {
|
message GetCharacterListRequest {
|
||||||
@@ -51,3 +52,12 @@ message GetCharacterRequest {
|
|||||||
message GetCharacterResponse {
|
message GetCharacterResponse {
|
||||||
character_common.CharacterFull character = 1;
|
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;
|
package character_db_api;
|
||||||
|
|
||||||
|
import "character_common.proto";
|
||||||
|
|
||||||
service CharacterDbService {
|
service CharacterDbService {
|
||||||
rpc GetCharacter (CharacterRequest) returns (Character);
|
rpc GetCharacter (CharacterRequest) returns (CharacterItem);
|
||||||
rpc GetCharacterList (CharacterListRequest) returns (CharacterListResponse);
|
rpc GetCharacterList (CharacterListRequest) returns (CharacterListResponse);
|
||||||
rpc CreateCharacter (CreateCharacterRequest) returns (CreateCharacterResponse);
|
rpc CreateCharacter (CreateCharacterRequest) returns (CreateCharacterResponse);
|
||||||
rpc DeleteCharacter (DeleteCharacterRequest) returns (DeleteCharacterResponse);
|
rpc DeleteCharacter (DeleteCharacterRequest) returns (DeleteCharacterResponse);
|
||||||
|
rpc SaveCharacter (SaveCharacterRequest) returns (SaveCharacterResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
message CharacterRequest {
|
message CharacterRequest {
|
||||||
@@ -18,8 +21,24 @@ message CharacterListRequest {
|
|||||||
string user_id = 1;
|
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 {
|
message CharacterListResponse {
|
||||||
repeated Character characters = 1;
|
repeated CharacterItem characters = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message CreateCharacterRequest {
|
message CreateCharacterRequest {
|
||||||
@@ -48,18 +67,11 @@ message DeleteCharacterResponse {
|
|||||||
string name = 2;
|
string name = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Character {
|
message SaveCharacterRequest {
|
||||||
int32 id = 1;
|
string session_id = 1;
|
||||||
string user_id = 2;
|
character_common.CharacterFull character = 2;
|
||||||
string name = 3;
|
}
|
||||||
int64 money = 4;
|
|
||||||
string inventory = 6;
|
message SaveCharacterResponse {
|
||||||
string stats = 7;
|
bool success = 1;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
@@ -5,6 +5,7 @@ package session_db_api;
|
|||||||
service SessionService {
|
service SessionService {
|
||||||
rpc GetSession(GetSessionRequest) returns (GetSessionResponse);
|
rpc GetSession(GetSessionRequest) returns (GetSessionResponse);
|
||||||
rpc RefreshSession(RefreshSessionRequest) returns (RefreshSessionResponse);
|
rpc RefreshSession(RefreshSessionRequest) returns (RefreshSessionResponse);
|
||||||
|
rpc UpdateSession(UpdateSessionRequest) returns (UpdateSessionResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
message GetSessionRequest {
|
message GetSessionRequest {
|
||||||
@@ -23,3 +24,15 @@ message RefreshSessionRequest {
|
|||||||
message RefreshSessionResponse {
|
message RefreshSessionResponse {
|
||||||
bool valid = 1;
|
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