Skip to content

Commit

Permalink
Handle date/platoon mismatch
Browse files Browse the repository at this point in the history
  • Loading branch information
mvshmakov committed Nov 14, 2020
1 parent 6d7aee3 commit aa171ea
Show file tree
Hide file tree
Showing 18 changed files with 90 additions and 84 deletions.
4 changes: 2 additions & 2 deletions src/api/v1/routes/news.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { authMiddleware } from "../middlewares";

const newsRoutes = Router();

type TGetNewsRequestBody = {
type GetNewsRequestBody = {
topic: string;
num?: number;
};
Expand All @@ -16,7 +16,7 @@ type TGetNewsRequestBody = {
newsRoutes.post("/getNews", [
authMiddleware,
async (
req: CustomRequest<TGetNewsRequestBody>,
req: CustomRequest<GetNewsRequestBody>,
res: Response,
): Promise<void> => {
const { topic, num } = req.body;
Expand Down
20 changes: 13 additions & 7 deletions src/api/v1/routes/schedule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ scheduleRoutes.get("/getPlatoonTypes", [
},
]);

type TGetScheduleForPlatoonRequestBody = {
type GetScheduleForPlatoonRequestBody = {
date: string;
platoon: string;
};
Expand All @@ -43,7 +43,7 @@ type TGetScheduleForPlatoonRequestBody = {
scheduleRoutes.post("/getScheduleForPlatoon", [
authMiddleware,
(
req: CustomRequest<TGetScheduleForPlatoonRequestBody>,
req: CustomRequest<GetScheduleForPlatoonRequestBody>,
res: Response,
): void => {
const { platoon, date } = req.body;
Expand All @@ -62,19 +62,25 @@ scheduleRoutes.post("/getScheduleForPlatoon", [
);
}

res.status(200).send(resolveScheduleFromPlatoon(platoon, date));
const result = resolveScheduleFromPlatoon(platoon, date);

if (!result) {
res.status(404).send("Bad Request. Date/platoon mismatch");
} else {
res.status(200).send(result);
}
},
]);

type TGetPlatoonTypeForPlatoonRequestBody = {
type GetPlatoonTypeForPlatoonRequestBody = {
platoon: string;
};

// TODO: use validators
scheduleRoutes.post("/getPlatoonTypeForPlatoon", [
authMiddleware,
(
req: CustomRequest<TGetPlatoonTypeForPlatoonRequestBody>,
req: CustomRequest<GetPlatoonTypeForPlatoonRequestBody>,
res: Response,
): void => {
const { platoon } = req.body;
Expand All @@ -95,14 +101,14 @@ scheduleRoutes.post("/getPlatoonTypeForPlatoon", [
},
]);

type TGetAvailableDatesForPlatoonRequestBody = {
type GetAvailableDatesForPlatoonRequestBody = {
platoon: string;
};

scheduleRoutes.post("/getAvailableDatesForPlatoon", [
authMiddleware,
(
req: CustomRequest<TGetAvailableDatesForPlatoonRequestBody>,
req: CustomRequest<GetAvailableDatesForPlatoonRequestBody>,
res: Response,
): void => {
const { platoon } = req.body;
Expand Down
4 changes: 2 additions & 2 deletions src/helpers/createScene.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { SceneHandler } from "@/typings";

const { enter } = Stage;

type TCreateSceneParams = {
type CreateSceneParams = {
name: string;
enterHandler?: SceneHandler;
messageHandler?: SceneHandler;
Expand All @@ -22,7 +22,7 @@ export default function createScene({
enterHandler,
messageHandler,
resultProcessor,
}: TCreateSceneParams): Scene<SceneContextMessageUpdate> {
}: CreateSceneParams): Scene<SceneContextMessageUpdate> {
let newScene = new BaseScene<SceneContextMessageUpdate>(sceneName);

if (enterHandler) {
Expand Down
18 changes: 9 additions & 9 deletions src/helpers/schedule.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { CellValue, Worksheet, FillPattern } from "exceljs";

import { popSimilarValues } from "@/helpers/general";
import { TScheduleDayItem } from "@/modules/Schedule";
import { ScheduleDayItem } from "@/modules/Schedule";
import { SCHEDULE_TIME } from "@/constants/dateTime";
import { resolvePlatoonTypeFromPlatoon } from "@/resolvers/schedule";

type TColumnDates = {
type ColumnDates = {
col: number;
value: CellValue;
}[];
Expand All @@ -14,11 +14,11 @@ export const getAllCellsFromRow = (
worksheet: Worksheet,
rowIndexes: number[],
startingColumn = 0,
): { row: number; dates: TColumnDates }[] => {
const arr: { row: number; dates: TColumnDates }[] = [];
): { row: number; dates: ColumnDates }[] => {
const arr: { row: number; dates: ColumnDates }[] = [];

rowIndexes.forEach((item) => {
const arrForEachRow: TColumnDates = [];
const arrForEachRow: ColumnDates = [];

worksheet.getRow(item).eachCell((cell, colNumber) => {
if (colNumber >= startingColumn) {
Expand Down Expand Up @@ -86,16 +86,16 @@ export const getAllActiveIndexes = (
return arr;
};

type TColorPalette = {
type ColorPalette = {
index: number;
value: CellValue;
}[];

export const getTrainingsColorPalette = (
worksheet: Worksheet,
column: number,
): TColorPalette => {
const colorPalette: TColorPalette = [];
): ColorPalette => {
const colorPalette: ColorPalette = [];
const excelColumn = worksheet.getColumn(column);

excelColumn.eachCell &&
Expand Down Expand Up @@ -179,7 +179,7 @@ export const hasOnlyValuesFromArray = (
export const formatHtmlScheduleResponse = (
platoon: string,
date: string,
{ weekday, schedule }: TScheduleDayItem,
{ weekday, schedule }: ScheduleDayItem,
): string => {
const platoonType = resolvePlatoonTypeFromPlatoon(platoon);
const header = `${platoon} (${platoonType}), ${date} (${weekday}):\n`;
Expand Down
4 changes: 2 additions & 2 deletions src/modules/Firebase/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as firebase from "firebase-admin";
import makeError from "make-error";

import { TFirebaseConfig } from "@/resolvers/config";
import { FirebaseConfig } from "@/resolvers/config";

const FirebaseError = makeError("FirebaseInitError");

Expand All @@ -17,7 +17,7 @@ export default abstract class AbstractFirebase {
projectId,
clientEmail,
privateKey,
}: TFirebaseConfig): void {
}: FirebaseConfig): void {
try {
this._instance = firebase
.initializeApp({
Expand Down
6 changes: 3 additions & 3 deletions src/modules/Metrica.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import makeError from "make-error";
import BotMetrica, { TMetricaTrackFunction } from "bot-metrica";
import BotMetrica, { MetricaTrackFunction } from "bot-metrica";
import { resolveMetricaConfigSync } from "@/resolvers/config";

// TODO: all errors унести from classes
const MetricaInitError = makeError("MetricaInitError");

class Metrica {
private _instance: TMetricaTrackFunction;
private _instance: MetricaTrackFunction;

get instance(): TMetricaTrackFunction {
get instance(): MetricaTrackFunction {
return this._instance;
}

Expand Down
12 changes: 6 additions & 6 deletions src/modules/News.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
import makeError from "make-error";
import { TArticle } from "google-news-rss";
import { Article } from "google-news-rss";
import { existsSync, readFileSync, writeFileSync } from "fs";

// import resolveNewsArticles from "@/resolvers/news";
import { resolveNewsFileConfigSync } from "@/resolvers/config";

const NewsStorageError = makeError("NewsStorageError");

type TNewsObject = {
articles: TArticle[];
type NewsObject = {
articles: Article[];
totalPages: number;
};

class NewsStorage {
private _instance: TNewsObject;
private _instance: NewsObject;

get instance(): TNewsObject {
get instance(): NewsObject {
return this._instance;
}

Expand All @@ -40,7 +40,7 @@ class NewsStorage {
}
}

dumpNews(builtNews: TNewsObject, parsedNewsPath: string): void {
dumpNews(builtNews: NewsObject, parsedNewsPath: string): void {
try {
const jsonString = JSON.stringify(builtNews);
writeFileSync(parsedNewsPath, jsonString, "utf8");
Expand Down
24 changes: 12 additions & 12 deletions src/modules/Schedule/Parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ import {
import { head, capitalizeFirstLetter } from "@/helpers/general";

import {
TSchedule,
TScheduleMeta,
TScheduleObject,
TScheduleMetaPlatoonTypes,
TScheduleMetaPlatoons,
TScheduleMetaDates,
Schedule,
ScheduleMeta,
ScheduleObject,
ScheduleMetaPlatoonTypes,
ScheduleMetaPlatoons,
ScheduleMetaDates,
} from ".";

const ScheduleParserError = makeError("ScheduleParserError");
Expand All @@ -35,10 +35,10 @@ class ScheduleParser {
trainings: "Тренировки:",
};

private _buildMeta(scheduleObj: TSchedule): TScheduleMeta {
const platoonTypesMeta: TScheduleMetaPlatoonTypes = [];
const platoonsMeta: TScheduleMetaPlatoons = {};
const datesMeta: TScheduleMetaDates = {};
private _buildMeta(scheduleObj: Schedule): ScheduleMeta {
const platoonTypesMeta: ScheduleMetaPlatoonTypes = [];
const platoonsMeta: ScheduleMetaPlatoons = {};
const datesMeta: ScheduleMetaDates = {};

Object.keys(scheduleObj).forEach((platoonType) => {
platoonTypesMeta.push(platoonType);
Expand Down Expand Up @@ -115,8 +115,8 @@ class ScheduleParser {
};
}

async parse(path: string): Promise<TScheduleObject> {
const schedule: TSchedule = {};
async parse(path: string): Promise<ScheduleObject> {
const schedule: Schedule = {};
const workbook = new Workbook();

try {
Expand Down
8 changes: 4 additions & 4 deletions src/modules/Schedule/Storage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@ import makeError from "make-error";
import { existsSync, readFileSync, writeFileSync } from "fs";
import { resolveScheduleFileConfigSync } from "@/resolvers/config";

import { ScheduleParser, TScheduleObject } from ".";
import { ScheduleParser, ScheduleObject } from ".";

const ScheduleStorageError = makeError("ScheduleStorageError");

class ScheduleStorage {
private _instance: TScheduleObject;
private _instance: ScheduleObject;

get instanсe(): TScheduleObject {
get instanсe(): ScheduleObject {
return this._instance;
}

Expand Down Expand Up @@ -43,7 +43,7 @@ class ScheduleStorage {
}

dumpSchedule(
builtSchedule: TScheduleObject,
builtSchedule: ScheduleObject,
parsedSchedulePath: string,
): void {
try {
Expand Down
26 changes: 13 additions & 13 deletions src/modules/Schedule/index.ts
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
export type TScheduleMetaPlatoonTypes = string[];
export type TScheduleMetaPlatoons = {
export type ScheduleMetaPlatoonTypes = string[];
export type ScheduleMetaPlatoons = {
[platoonType: string]: string[];
};
export type TScheduleMetaDates = {
export type ScheduleMetaDates = {
[platoon: string]: string[];
};

export type TScheduleMeta = {
export type ScheduleMeta = {
// [ "Офицеры - разведка", "Сержанты МСВ", "Офицеры ВКС", ... ],
platoonTypes: TScheduleMetaPlatoonTypes;
platoonTypes: ScheduleMetaPlatoonTypes;
// { "Офицеры - разведка": [ "1606", "1909", ... ], "Сержанты МСВ": [Array], ... }
platoons: TScheduleMetaPlatoons;
platoons: ScheduleMetaPlatoons;
// { "1701": [ "10 января", "17 января", ... ],"1702": [Array], ... }
dates: TScheduleMetaDates;
dates: ScheduleMetaDates;
};

export type TScheduleDayItem = {
export type ScheduleDayItem = {
weekday: string;
schedule: string[];
};

export type TSchedule = {
export type Schedule = {
// {
// "Офицеры - разведка": {
// "1703": {
Expand All @@ -39,14 +39,14 @@ export type TSchedule = {
// }
[platoonType: string]: {
[platoon: string]: {
[date: string]: TScheduleDayItem;
[date: string]: ScheduleDayItem;
};
};
};

export type TScheduleObject = {
meta: TScheduleMeta;
schedule: TSchedule;
export type ScheduleObject = {
meta: ScheduleMeta;
schedule: Schedule;
};

export { default as ScheduleParser } from "./Parser";
Expand Down
4 changes: 2 additions & 2 deletions src/resolvers/config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import * as path from "path";

export type TFirebaseConfig = {
export type FirebaseConfig = {
databaseURL: string;
projectId: string;
clientEmail: string;
Expand All @@ -9,7 +9,7 @@ export type TFirebaseConfig = {

export const resolveFirebaseConfigSync = (
databaseName: "users" | "schedule",
): TFirebaseConfig =>
): FirebaseConfig =>
databaseName === "users"
? {
databaseURL: process.env.FIREBASE_USERS_URL || "",
Expand Down
6 changes: 3 additions & 3 deletions src/resolvers/news.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import makeError from "make-error";
import GoogleNewsRss, { TArticle } from "google-news-rss";
import GoogleNewsRss, { Article } from "google-news-rss";

import { getFormattedDate } from "@/helpers/dates";
import { DEFAULT_NUM_OF_ARTICLES } from "@/constants/configuration";
Expand All @@ -16,7 +16,7 @@ const finalizeTopic = (topic: string): string =>
export default async function resolveNewsArticles(
topic: string,
numOfArticles = DEFAULT_NUM_OF_ARTICLES,
): Promise<TArticle[]> {
): Promise<Article[]> {
let rawArticles;

try {
Expand All @@ -32,7 +32,7 @@ export default async function resolveNewsArticles(
}

return rawArticles.slice(0, numOfArticles).map(
(article: TArticle): TArticle => {
(article: Article): Article => {
article.pubDate = getFormattedDate(new Date(article.pubDate));
return article;
},
Expand Down

0 comments on commit aa171ea

Please sign in to comment.