Files
ipwa/src/app/admin-view/admin-comm.service.ts

283 lines
10 KiB
TypeScript

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Moment } from 'moment';
import { environment } from 'src/environments/environment';
import { Menu } from '../types/menu';
import { Status } from '../types/status';
import { Group } from '../types/group';
import { map, of } from 'rxjs';
import { Notification } from '../types/notification';
import { News } from '../types/news';
import { AKey } from '../types/key';
import * as moment from 'moment';
import { IUSettings } from './settings/settings.component';
import User from '../types/user';
@Injectable({
providedIn: 'root'
})
export class AdminCommService {
constructor(private http: HttpClient) { }
//#region Menu
menu = {
getMenu: (start?: Moment | null, end?: Moment | null) => {
if (start && end) {
const body = {start: start.toString(), end: end.toString()}
return this.http.get<Menu[]>(environment.apiEndpoint+"/admin/menu", {withCredentials: true, params: body})
}
return
},
getOpts: () => {
return this.http.get<any>(environment.apiEndpoint+`/admin/menu/opts`, {withCredentials: true})
},
postMenu: (file: File) => {
if (file) {
const formData = new FormData();
formData.append("menu", file)
return this.http.post<Status>(environment.apiEndpoint+"/admin/menu/upload", formData, {withCredentials: true})
}
return
},
editSn: (id: string, content: Menu['sn']) => {
return this.putMenu(id, {sn: content})
},
editOb: (id: string, content: Menu['ob']) => {
return this.putMenu(id, {ob: content})
},
editKol: (id: string, content: Menu['kol']) => {
return this.putMenu(id, {kol: content})
},
editTitle: (id: string, content: Menu['dayTitle']) => {
return this.putMenu(id, {dayTitle: content})
},
print: (start?: Moment | null, end?: Moment | null) => {
if (start && end) {
const body = {start: start.toString(), end: end.toString()}
return this.http.get(environment.apiEndpoint+"/admin/menu/print", {withCredentials: true, params: body, responseType: "text"})
}
return
},
stat: (day: Moment, m: "ob" | "kol") => {
return this.http.get<{y: number, n: number}>(environment.apiEndpoint+`/admin/menu/${day.toISOString()}/votes/${m}`, {withCredentials: true})
},
new: {
single: (day: Moment) => {
return this.http.post<Status>(environment.apiEndpoint+`/admin/menu/${day.toISOString()}`, null, {withCredentials: true})
},
range: (start: Moment, count: number) => {
return this.http.post<Status>(environment.apiEndpoint+`/admin/menu/${start.toISOString()}/${count}/`, null, {withCredentials: true})
}
},
rm: (id: string) => {
return this.http.delete<Status>(environment.apiEndpoint+`/admin/menu/${id}`, {withCredentials: true})
}
}
private putMenu(id: string, update: Partial<Menu>) {
return this.http.put<Status>(environment.apiEndpoint+`/admin/menu/${id}`, update, {withCredentials: true})
}
//#endregion
//#region News
news = {
getNews: () => {
return this.http.get<News[]>(environment.apiEndpoint+`/admin/news`, {withCredentials: true})
},
postNews: (title: string, content: string) => {
return this.http.post<any>(environment.apiEndpoint+`/admin/news`, {title: title, content: content}, {withCredentials: true})
},
deleteNews: (id: string) => {
return this.http.delete<any>(environment.apiEndpoint+`/admin/news/${id}`, {withCredentials: true})
},
toggleNews: (id: string, inverter: boolean) => {
return this.putNews(id,{visible: !inverter})
},
togglePin: (id: string, inverter: boolean) => {
return this.putNews(id,{pinned: !inverter})
},
updateNews: (id: string, title: string, content: string) => {
return this.putNews(id,{title: title, content: content, date: Date.now})
}
}
private putNews(id: string, update: object) {
return this.http.put<any>(environment.apiEndpoint+`/admin/news/${id}`, update, {withCredentials: true})
}
//#endregion
//#region amgmt
accs = {
getAccs: () => {
return this.http.get<{
users: Omit<User, "pass">[],
groups: Group[]
}>(environment.apiEndpoint+`/admin/accs`, {withCredentials: true})
},
postAcc: (item: any) => {
return this.http.post<Status>(environment.apiEndpoint+`/admin/accs`, item, {withCredentials: true})
},
putAcc: (id: string, update: Partial<User>) => {
return this.http.put<Status>(environment.apiEndpoint+`/admin/accs/${id}`, update, {withCredentials: true})
},
resetPass: (id: string) => {
return this.http.patch<Status>(environment.apiEndpoint+`/admin/accs/${id}/reset`, {}, {withCredentials: true})
},
deleteAcc: (id: string) => {
return this.http.delete<Status>(environment.apiEndpoint+`/admin/accs/${id}`, {withCredentials: true})
},
getUser: (id: string) => {
return this.http.get<Omit<User, "pass"> & {lockout: boolean}>(environment.apiEndpoint+`/admin/accs/${id}`, {withCredentials: true})
},
clearLockout: (id: string) => {
return this.http.delete<Status>(environment.apiEndpoint+`/admin/accs/${id}/lockout`, {withCredentials: true})
}
}
//#endregion
//#region Groups
groups = {
getGroups: () => {
return this.http.get<Group[]>(environment.apiEndpoint+`/admin/groups`, {withCredentials: true})
},
newGroup: (name: string) => {
return this.http.post<Status>(environment.apiEndpoint+`/admin/groups`, {name: name}, {withCredentials: true})
},
editName: (id: string, name: string) => {
return this.putGroups(id, {name: name.trim()})
},
remove: (id: string) => {
return this.http.delete<Status>(environment.apiEndpoint+`/admin/groups/${id}`, {withCredentials: true})
}
}
private putGroups(id: string, update: Partial<Group>) {
return this.http.put<Status>(environment.apiEndpoint+`/admin/groups/${id}`, update, {withCredentials: true})
}
//#endregion
//#region Notif
notif = {
send: (n: Notification) => {
return this.http.post<{sent: number, possible: number}>(environment.apiEndpoint+"/admin/notif/send", n, {withCredentials: true})
},
getGroups: () => {
return this.http.get<Group[]>(environment.apiEndpoint+"/admin/notif/groups", {withCredentials: true})
},
outbox: {
getSent: () => {
return this.http.get<{_id: string, sentDate: moment.Moment, title: string}[]>(environment.apiEndpoint+"/admin/notif/outbox", {withCredentials: true})
},
getBody: (id: string) => {
return this.http.get(environment.apiEndpoint+`/admin/notif/outbox/${id}/message`, {withCredentials: true, responseType: "text"})
},
getRcpts: (id: string) => {
return this.http.get<{_id: string, uname: string, room?: string, fname?: string, surname?: string}[]>(environment.apiEndpoint+`/admin/notif/outbox/${id}/rcpts`, {withCredentials: true})
}
}
}
//#endregion
//#region Keys
keys = {
getKeys: () => {
return this.http.get<AKey[]>(environment.apiEndpoint+`/admin/keys`, {withCredentials: true}).pipe(map((v) => {
return v.map((r) => {
r.borrow = moment(r.borrow)
if (r.tb) r.tb = moment(r.tb)
return r
})
}))
},
avalKeys: () => {
return this.http.get<string[]>(environment.apiEndpoint+`/admin/keys/available`, {withCredentials: true})
},
postKey: (room: string, uname: string) => {
return this.http.post<Status>(environment.apiEndpoint+`/admin/keys/`, {room: room, whom: uname}, {withCredentials: true})
},
returnKey: (id: string) => {
return this.putKeys(id, {tb: moment.utc()})
}
}
private putKeys(id: string, update: Partial<AKey>) {
return this.http.put<Status>(environment.apiEndpoint+`/admin/keys/${id}`, update, {withCredentials: true})
}
//#endregion
//#region Clean
clean = {
getConfig: () => {
return this.http.get<{rooms: string[], things: string[]}>(environment.apiEndpoint+`/admin/clean/config`, {withCredentials: true})
},
getClean: (date: moment.Moment, room: string) => {
return this.http.get<{_id: string, date: string, grade: number, gradeDate: string, notes: {label: string, weight: number}[], room: string, tips: string} | null>(environment.apiEndpoint+`/admin/clean/${date.toISOString()}/${room}`, {withCredentials: true})
},
postClean: (obj: Object) => {
return this.http.post<Status>(environment.apiEndpoint+`/admin/clean/`, obj, {withCredentials: true})
},
delete: (id: string) => {
return this.http.delete<Status>(environment.apiEndpoint+`/admin/clean/${id}`, {withCredentials: true})
},
summary: {
getSummary: (start: moment.Moment, end: moment.Moment) => {
return this.http.get<{room: string, avg: number}[]>(environment.apiEndpoint+`/admin/clean/summary/${start.toISOString()}/${end.toISOString()}`, {withCredentials: true})
}
},
attendence: {
getUsers: (room: string) => {
return this.http.get<{users: {fname: string, surname: string, _id: string}[], attendence?: {auto: {id: string, hour?: string}[], notes: string}}>(environment.apiEndpoint+`/admin/clean/attendence/${room}`, {withCredentials: true})
},
postAttendence: (room: string, attendence: {auto: {id: string, hour?: string}[], notes: string}) => {
return this.http.post<Status>(environment.apiEndpoint+`/admin/clean/attendence/${room}`, attendence, {withCredentials: true})
},
getSummary: () => {
return this.http.get<{room: string, hours: string[], notes: string, auto: boolean}[]>(environment.apiEndpoint+`/admin/clean/attendenceSummary`, {withCredentials: true})
},
deleteRoom: (room: string) => {
return this.http.delete<Status>(environment.apiEndpoint+`/admin/clean/attendence/${room}`, {withCredentials: true})
}
}
}
//#endregion
//#region Settings
settings = {
getAll: () => {
return this.http.get<IUSettings>(environment.apiEndpoint+`/admin/settings/`, {withCredentials: true})
},
post: (settings: IUSettings) => {
return this.http.post<Status>(environment.apiEndpoint+`/admin/settings/`, settings, {withCredentials: true})
},
reload: () => {
return this.http.get<Status>(environment.apiEndpoint+`/admin/settings/reload/`, {withCredentials: true})
}
}
//#endregion
//#region misc
userFilter = (query: string) => {
return this.http.get<any[]>(environment.apiEndpoint+`/admin/usearch`, {params: {q: query}, withCredentials: true})
}
//#endregion
}