Add tags for schedules
This commit is contained in:
parent
f3f3d36eed
commit
75f8afd624
10 changed files with 375 additions and 184 deletions
src/handlers/v1
|
@ -2,20 +2,23 @@ use std::convert::TryFrom;
|
|||
use actix_web::{HttpResponse, Responder, web, get, delete};
|
||||
use serde::{Serialize, Deserialize};
|
||||
|
||||
use crate::db;
|
||||
use crate::db::models::Periods;
|
||||
use crate::db::schedule::*;
|
||||
use crate::handlers::errors::HandlerError;
|
||||
use crate::return_models::ReturnSchedule;
|
||||
use crate::types::EmgauwaUid;
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct RequestSchedule {
|
||||
name: String,
|
||||
periods: Periods,
|
||||
tags: Vec<String>,
|
||||
}
|
||||
|
||||
pub async fn index() -> impl Responder {
|
||||
let schedules = db::get_schedules();
|
||||
HttpResponse::Ok().json(schedules)
|
||||
let schedules = get_schedules();
|
||||
let return_schedules: Vec<ReturnSchedule> = schedules.into_iter().map(ReturnSchedule::from).collect();
|
||||
HttpResponse::Ok().json(return_schedules)
|
||||
}
|
||||
|
||||
#[get("/api/v1/schedules/{schedule_id}")]
|
||||
|
@ -25,9 +28,9 @@ pub async fn show(web::Path((schedule_uid,)): web::Path<(String,)>) -> impl Resp
|
|||
|
||||
match emgauwa_uid {
|
||||
Ok(uid) => {
|
||||
let schedule = db::get_schedule_by_uid(uid);
|
||||
let schedule = get_schedule_by_uid(uid);
|
||||
match schedule {
|
||||
Ok(ok) => HttpResponse::Ok().json(ok),
|
||||
Ok(ok) => HttpResponse::Ok().json(ReturnSchedule::from(ok)),
|
||||
Err(err) => HttpResponse::from(err),
|
||||
}
|
||||
},
|
||||
|
@ -36,12 +39,19 @@ pub async fn show(web::Path((schedule_uid,)): web::Path<(String,)>) -> impl Resp
|
|||
}
|
||||
|
||||
pub async fn add(post: web::Json<RequestSchedule>) -> impl Responder {
|
||||
let new_schedule = db::create_schedule(&post.name, &post.periods);
|
||||
let new_schedule = create_schedule(&post.name, &post.periods);
|
||||
|
||||
match new_schedule {
|
||||
Ok(ok) => HttpResponse::Created().json(ok),
|
||||
Err(err) => HttpResponse::from(err),
|
||||
if new_schedule.is_err() {
|
||||
return HttpResponse::from(new_schedule.unwrap_err())
|
||||
}
|
||||
let new_schedule = new_schedule.unwrap();
|
||||
|
||||
let result = set_schedule_tags(&new_schedule, post.tags.as_slice());
|
||||
if result.is_err() {
|
||||
return HttpResponse::from(result.unwrap_err());
|
||||
}
|
||||
|
||||
HttpResponse::Created().json(ReturnSchedule::from(new_schedule))
|
||||
}
|
||||
|
||||
#[delete("/api/v1/schedules/{schedule_id}")]
|
||||
|
@ -53,7 +63,7 @@ pub async fn delete(web::Path((schedule_uid,)): web::Path<(String,)>) -> impl Re
|
|||
EmgauwaUid::Off => HttpResponse::from(HandlerError::ProtectedSchedule),
|
||||
EmgauwaUid::On => HttpResponse::from(HandlerError::ProtectedSchedule),
|
||||
EmgauwaUid::Any(_) => {
|
||||
match db::delete_schedule_by_uid(uid) {
|
||||
match delete_schedule_by_uid(uid) {
|
||||
Ok(_) => HttpResponse::Ok().json("schedule got deleted"),
|
||||
Err(err) => HttpResponse::from(err)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue