Skip to content

Instantly share code, notes, and snippets.

View radzserg's full-sized avatar

Sergey Radzishevskii radzserg

View GitHub Profile
class OrderManager {
public createOrder(orderData) {
(new OrderValidator).validateOrderInput(orderData);
const total = (new OrderCalculator).calculateTotal(orderData);
(new MyPaymentGateway).processPayment(total, { meta: "info" });
return (new OrderRepository()).save(orderData);
}
}
class OrderManager {
public async createOrder(orderData) {
if (!orderData.items.length) {
throw new ValidationError("Cannot create an order: cart is empty");
}
orderData.items.forEach((orderItem) => {
if (orderItem.productId === undefined || orderItem.quantity === undefined || orderItem.price === undefined) {
throw new ValidationError("Cannot create an order: product ID is missing");
}
<?php
// be sure to change BaseUser to inherit from Permitable
Yii::import('application.components.behaviors.ActiveRecordOriginalAttributeValuesBehavior');
Yii::import('application.components.behaviors.VendoriTimestampBehavior');
use vendori\components\clearbit\RequestQueuedException;
use Phpass\Hash as PhpassHash;
use vendori\components\ClearbitSalesReps;
use vendori\emails\RegistrationConfirmation;
@radzserg
radzserg / yii_validation_rules_example.php
Last active June 25, 2020 12:50
yii validation rules example
<?php
class Yii1Model
{
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
// Required fields
class DailyAttendanceReport {
public constructor(
private reportGenerator: DailyAttendanceReportGenerator,
private reportSender: DailyAttendanceReportSender
) {}
public generate = () => {
const report = this.reportGenerator.generate();
this.reportSender.send(report);
};
class DailyAttendanceReport {
public constructor(
private knex: Knex,
private viewRenderer: ViewRenderer,
private emailTransport: EmailTransport
) {}
public generate = () => {
const since = moment()
.subtract(1, "days")
class RoastedDuckReceipt {
public cook() {
console.log("Prepare the duck");
console.log("Add spices");
console.log("Roast the duck for 3 hours");
console.log("Make a sauce");
}
}
class CeasarSaladReceipt {
class Cook {
public makeDinner() {
this.cookRoastedDuck();
this.cookCeasarSalad();
this.serveDrinks();
}
private cookRoastedDuck() {
console.log("Prepare the duck");
console.log("Add spices");
class Cook {
public makeDinner() {
console.log("Dinner served");
}
}
const mom = new Cook();
mom.makeDinner();
const di: IDIContainer = configureTestDI();
const knex = di.get<Knex>(APP_DEP.DB);
const dbSeeder = di.get<DbSeeder>(APP_DEP.TEST_DB_SEEDER);
const repo = new PostsRepo(knex);
describe("PostsRepo", () => {
// to speed up our tests and do not trash test DB
// we will run test in the transaction and roll it back after execution
beforeEach(async () => {
await knex.raw("BEGIN");