initial commit
This commit is contained in:
commit
e9ec719ae5
8 changed files with 2218 additions and 0 deletions
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
/target
|
||||||
|
.env
|
||||||
2119
Cargo.lock
generated
Normal file
2119
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
15
Cargo.toml
Normal file
15
Cargo.toml
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
[package]
|
||||||
|
name = "nex-account"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
prost = "0.14.3"
|
||||||
|
tonic-prost = "*"
|
||||||
|
tonic = "0.14.6"
|
||||||
|
tokio = { version = "1.52.3", features = ["macros", "rt-multi-thread"] }
|
||||||
|
sqlx = { version = "0.9.0", features = ["postgres"] }
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
tonic-prost-build = "0.14.6"
|
||||||
|
|
||||||
7
build.rs
Normal file
7
build.rs
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
println!("cargo:rerun-if-changed=build.rs");
|
||||||
|
println!("cargo:rerun-if-changed=./grpc.proto");
|
||||||
|
|
||||||
|
tonic_prost_build::configure().compile_protos(&["./grpc.proto"], &["./"])?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
22
grpc.proto
Normal file
22
grpc.proto
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package nex_account;
|
||||||
|
|
||||||
|
message ActCreateInfoNoPid {
|
||||||
|
string principal_name = 1;
|
||||||
|
string key = 2;
|
||||||
|
string email = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message PID {
|
||||||
|
int32 pid = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message NexKey {
|
||||||
|
string key = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
service NexAccountService {
|
||||||
|
rpc CreateNewSequentialOrUpdateAndGetAccount(ActCreateInfoNoPid) returns (PID);
|
||||||
|
rpc GetNexKeyByPid(PID) returns (NexKey);
|
||||||
|
}
|
||||||
1
src/grpc.rs
Normal file
1
src/grpc.rs
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
tonic::include_proto!("nex_account");
|
||||||
1
src/lib.rs
Normal file
1
src/lib.rs
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
pub mod grpc;
|
||||||
51
src/main.rs
Normal file
51
src/main.rs
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
use std::{
|
||||||
|
env,
|
||||||
|
net::{Ipv4Addr, SocketAddr, SocketAddrV4},
|
||||||
|
};
|
||||||
|
|
||||||
|
use sqlx::PgPool;
|
||||||
|
use tonic::transport::Server;
|
||||||
|
|
||||||
|
use crate::grpc::{
|
||||||
|
ActCreateInfoNoPid, NexKey, Pid,
|
||||||
|
nex_account_service_server::{NexAccountService, NexAccountServiceServer},
|
||||||
|
};
|
||||||
|
|
||||||
|
pub mod grpc;
|
||||||
|
|
||||||
|
pub struct NexAccountServer {
|
||||||
|
pool: PgPool,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tonic::async_trait]
|
||||||
|
impl NexAccountService for NexAccountServer {
|
||||||
|
async fn create_new_sequential_or_update_and_get_account(
|
||||||
|
&self,
|
||||||
|
request: tonic::Request<ActCreateInfoNoPid>,
|
||||||
|
) -> std::result::Result<tonic::Response<Pid>, tonic::Status> {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn get_nex_key_by_pid(
|
||||||
|
&self,
|
||||||
|
request: tonic::Request<Pid>,
|
||||||
|
) -> std::result::Result<tonic::Response<NexKey>, tonic::Status> {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
let db_url = env::var("DATABASE_URL").expect("database url not specified");
|
||||||
|
let pool = PgPool::connect(&db_url)
|
||||||
|
.await
|
||||||
|
.expect("unable to connect to database");
|
||||||
|
Server::builder()
|
||||||
|
.add_service(NexAccountServiceServer::new(NexAccountServer { pool }))
|
||||||
|
.serve(SocketAddr::V4(SocketAddrV4::new(
|
||||||
|
Ipv4Addr::UNSPECIFIED,
|
||||||
|
10000,
|
||||||
|
)))
|
||||||
|
.await
|
||||||
|
.expect("server failed to start");
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue