- update: grpc character db api now includes getting the character list
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use crate::grpc::{CharacterRequest, CharacterResponse, CreateCharacterRequest, DeleteCharacterRequest, Empty};
|
||||
use crate::grpc::{Character, CharacterRequest, CharacterListRequest, CharacterListResponse, CreateCharacterRequest, CreateCharacterResponse, DeleteCharacterRequest, Empty};
|
||||
use crate::grpc::character_service_server::CharacterService;
|
||||
use crate::grpc::database_service::MyDatabaseService;
|
||||
use tonic::{Request, Response, Status};
|
||||
@@ -8,7 +8,7 @@ impl CharacterService for MyDatabaseService {
|
||||
async fn get_character(
|
||||
&self,
|
||||
request: Request<CharacterRequest>,
|
||||
) -> Result<Response<CharacterResponse>, Status> {
|
||||
) -> Result<Response<Character>, Status> {
|
||||
let req = request.into_inner();
|
||||
let repo = &self.db.character_repo;
|
||||
|
||||
@@ -17,7 +17,7 @@ impl CharacterService for MyDatabaseService {
|
||||
.await
|
||||
.map_err(|_| Status::not_found("Character not found"))?;
|
||||
|
||||
let response = CharacterResponse {
|
||||
let response = Character {
|
||||
id: character.id,
|
||||
user_id: character.user_id,
|
||||
name: character.name,
|
||||
@@ -35,12 +35,53 @@ impl CharacterService for MyDatabaseService {
|
||||
Ok(Response::new(response))
|
||||
}
|
||||
|
||||
async fn get_character_list(
|
||||
&self,
|
||||
request: Request<CharacterListRequest>,
|
||||
) -> Result<Response<CharacterListResponse>, Status> {
|
||||
let req = request.into_inner();
|
||||
let repo = &self.db.character_repo;
|
||||
|
||||
let characters = repo
|
||||
.get_characters_by_user(req.user_id)
|
||||
.await
|
||||
.map_err(|_| Status::not_found("Character not found"))?;
|
||||
|
||||
let mut character_list: Vec<Character> = Vec::new();
|
||||
|
||||
for character in characters {
|
||||
let character = Character {
|
||||
id: character.id,
|
||||
user_id: character.user_id,
|
||||
name: character.name,
|
||||
level: character.level as i32,
|
||||
experience: character.experience,
|
||||
inventory: character.inventory.to_string(),
|
||||
stats: character.stats.to_string(),
|
||||
looks: character.looks.to_string(),
|
||||
position: character.position.to_string(),
|
||||
created_at: character.created_at.to_string(),
|
||||
updated_at: character.updated_at.to_string(),
|
||||
is_active: character.is_active,
|
||||
};
|
||||
character_list.push(character);
|
||||
}
|
||||
|
||||
let response = CharacterListResponse {
|
||||
characters: character_list,
|
||||
};
|
||||
|
||||
Ok(Response::new(response))
|
||||
}
|
||||
|
||||
async fn create_character(
|
||||
&self,
|
||||
request: Request<CreateCharacterRequest>,
|
||||
) -> Result<Response<CharacterResponse>, Status> {
|
||||
) -> Result<Response<CreateCharacterResponse>, Status> {
|
||||
let req = request.into_inner();
|
||||
let repo = &self.db.character_repo;
|
||||
|
||||
//todo: we need to check if the character name exists already
|
||||
|
||||
let character_id = repo
|
||||
.create_character(
|
||||
@@ -59,19 +100,8 @@ impl CharacterService for MyDatabaseService {
|
||||
.await
|
||||
.map_err(|_| Status::not_found("Character not found"))?;
|
||||
|
||||
let response = CharacterResponse {
|
||||
id: character.id,
|
||||
user_id: character.user_id,
|
||||
name: character.name,
|
||||
level: character.level as i32,
|
||||
experience: character.experience,
|
||||
inventory: character.inventory.to_string(),
|
||||
stats: character.stats.to_string(),
|
||||
looks: character.looks.to_string(),
|
||||
position: character.position.to_string(),
|
||||
created_at: character.created_at.to_string(),
|
||||
updated_at: character.updated_at.to_string(),
|
||||
is_active: character.is_active,
|
||||
let response = CreateCharacterResponse {
|
||||
character_id: character.id,
|
||||
};
|
||||
|
||||
Ok(Response::new(response))
|
||||
|
||||
@@ -3,8 +3,9 @@ syntax = "proto3";
|
||||
package character_db_api;
|
||||
|
||||
service CharacterService {
|
||||
rpc GetCharacter (CharacterRequest) returns (CharacterResponse);
|
||||
rpc CreateCharacter (CreateCharacterRequest) returns (CharacterResponse);
|
||||
rpc GetCharacter (CharacterRequest) returns (Character);
|
||||
rpc GetCharacterList (CharacterListRequest) returns (CharacterListResponse);
|
||||
rpc CreateCharacter (CreateCharacterRequest) returns (CreateCharacterResponse);
|
||||
rpc DeleteCharacter (DeleteCharacterRequest) returns (Empty);
|
||||
}
|
||||
|
||||
@@ -12,6 +13,14 @@ message CharacterRequest {
|
||||
int32 character_id = 1;
|
||||
}
|
||||
|
||||
message CharacterListRequest {
|
||||
int32 user_id = 1;
|
||||
}
|
||||
|
||||
message CharacterListResponse {
|
||||
repeated Character characters = 1;
|
||||
}
|
||||
|
||||
message CreateCharacterRequest {
|
||||
int32 user_id = 1;
|
||||
string name = 2;
|
||||
@@ -21,11 +30,15 @@ message CreateCharacterRequest {
|
||||
string position = 6; // JSON serialized
|
||||
}
|
||||
|
||||
message CreateCharacterResponse {
|
||||
int32 character_id = 1;
|
||||
}
|
||||
|
||||
message DeleteCharacterRequest {
|
||||
int32 character_id = 1;
|
||||
}
|
||||
|
||||
message CharacterResponse {
|
||||
message Character {
|
||||
int32 id = 1;
|
||||
int32 user_id = 2;
|
||||
string name = 3;
|
||||
|
||||
Reference in New Issue
Block a user