commit
59981e2636
@ -0,0 +1,3 @@ |
||||
BIND_ADDRESS="127.0.0.1" |
||||
BIND_PORT="4220" |
||||
SAVE_PATH="/home/g/movie_reqs.csv" |
||||
@ -0,0 +1 @@ |
||||
/target |
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,13 @@ |
||||
[package] |
||||
name = "movie_req_api" |
||||
version = "0.1.0" |
||||
edition = "2021" |
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html |
||||
|
||||
[dependencies] |
||||
dotenv = "0.15.0" |
||||
actix-web = "4" |
||||
serde = {version= "1.0.152", features=["derive"]} |
||||
chrono = "0.4.23" |
||||
csv = "1.2.0" |
||||
@ -0,0 +1,52 @@ |
||||
use actix_web::{App, HttpResponse, HttpServer, Responder, web::{post,Json}}; |
||||
use dotenv::var; |
||||
use serde::{Serialize,Deserialize}; |
||||
use csv::Writer; |
||||
use std::fs::OpenOptions; |
||||
use chrono::Utc; |
||||
|
||||
|
||||
#[derive(Serialize,Deserialize)] |
||||
struct MovieRequest { |
||||
title: String, |
||||
description: String, |
||||
} |
||||
|
||||
#[actix_web::main] |
||||
async fn main() -> std::io::Result<()> { |
||||
|
||||
let bind_address = var("BIND_ADDRESS").expect("No bind address configured in .env!"); |
||||
let bind_port = var("BIND_PORT").expect("No bind port configured in .env!") |
||||
.parse::<u16>().expect("Failed to convert bind port to u16"); |
||||
|
||||
HttpServer::new(move || { |
||||
App::new() |
||||
.route("/moviereq",post().to(moviereq)) |
||||
}) |
||||
.bind((bind_address, bind_port))? |
||||
.run() |
||||
.await |
||||
} |
||||
|
||||
async fn moviereq(item: Json<MovieRequest>) -> impl Responder { |
||||
//TODO: implement a real database for movie reqs
|
||||
let date_time_added = Utc::now(); |
||||
let formatted_date_time_added = date_time_added.format("%Y-%m-%d:%H:%M").to_string(); |
||||
|
||||
let csv_file = var("SAVE_PATH").expect("No save path configured in .env!"); |
||||
|
||||
let file = match OpenOptions::new() |
||||
.write(true) |
||||
.create(true) |
||||
.append(true) |
||||
.open(csv_file) { |
||||
Ok(file) => file, |
||||
Err(_) => return HttpResponse::InternalServerError().body("Failed to add request to database"), |
||||
}; |
||||
|
||||
let mut csv_writer = Writer::from_writer(file); |
||||
let record = (formatted_date_time_added, &item.title, &item.description); |
||||
csv_writer.serialize(record).unwrap(); |
||||
|
||||
HttpResponse::Ok().body("Successfully added to the database") |
||||
} |
||||
Loading…
Reference in new issue