Skip to content

Instantly share code, notes, and snippets.

View MariusBongarts's full-sized avatar

Marius Bongarts MariusBongarts

View GitHub Profile
type UserRole = 'ADMIN' | 'USER';
interface User {
id: string;
isActivated: boolean;
role: UserRole;
}
@MariusBongarts
MariusBongarts / helper.ts
Created August 7, 2021 10:48
DRY - helper
export const userIsPermitted = (user: User) => user.isActivated && user.role === 'ADMIN';
async create(user: User, product: Product): Promise<Product | undefined> {
if (userIsPermitted(user)) {
console.log(`Create product.`);
return this.db.create({user, product});
}
return undefined;
}
@MariusBongarts
MariusBongarts / ProductService.ts
Last active August 8, 2021 15:28
DRY - Updated ProductService
class ProductService {
private db: DB<Product>;
private entity = 'product';
constructor() {
this.db = new DB<Product>(this.entity);
}
async create(user: User, product: Product): Promise<Product | undefined> {
if (userIsPermitted(user)) {
createVehicle("red", "black", 4, 4);
@MariusBongarts
MariusBongarts / vehicle.ts
Last active August 8, 2021 17:15
Example
createVehicle({ exteriorColor: "red", interiorColor: "black", wheels: 4, cylinders: 4 });
@MariusBongarts
MariusBongarts / ProductService.ts
Last active August 8, 2021 15:28
DRY - ProductService Options object
interface ProductOperationOptions {
user: User;
entity: Product;
}
export class ProductService {
private db: DB<Product>;
private entity = 'product';
constructor() {
@MariusBongarts
MariusBongarts / FeedbackService.ts
Last active August 7, 2021 13:04
DRY - FeedbackService
interface Feedback {
id: string;
title: string;
}
interface FeedbackOperationOptions {
user: User;
entity: Feedback;
}
@MariusBongarts
MariusBongarts / CRUDService.ts
Last active August 8, 2021 15:28
DRY - CRUDService
interface Entity {
id: string;
}
interface CrudOperationOptions<T extends Entity> {
user: User;
entity: T;
}
type CrudReturnType<T> = Promise<T | undefined>;
@MariusBongarts
MariusBongarts / FeedbackService.ts
Last active August 7, 2021 13:33
DRY - FeedbackService updated
class FeedbackService extends CRUDService<Feedback> {
constructor() {
super('feedback');
}
async create(options: CrudOperationOptions<Feedback>) {
if (userIsPermitted(options.user)) {
return super.create(options);
}