Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
node_modules/
reports/
build/
dist/
generated/prisma/

### JetBrains template
Expand Down
9 changes: 9 additions & 0 deletions cucumber.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
let common = [
"features/**/*.feature",
"--require-module ts-node/register",
"--require features/**/*.ts",
].join(" ");

module.exports = {
default: common,
};
10 changes: 0 additions & 10 deletions cucumber.json

This file was deleted.

4 changes: 2 additions & 2 deletions eslint.config.js → eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import eslint from "@eslint/js";
import prettierConfig from "eslint-config-prettier";
import tseslint from "typescript-eslint";
import prettierConfig from "eslint-config-prettier";

export default tseslint.config(
{
ignores: ["build/**"],
ignores: ["dist/**", "node_modules/**", "**/*.js"],
},
eslint.configs.recommended,
tseslint.configs.recommended,
Expand Down
12 changes: 6 additions & 6 deletions features/steps/common_steps.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import { Given } from "@cucumber/cucumber";
import { User } from "../../src/Domain/Models/User.js";
import { Vehicle } from "../../src/Domain/Models/Vehicle.js";
import { InMemoryFleetRepository } from "../../src/Secondary/Repositories/InMemoryFleetRepository.js";
import { initializeFleetForUser } from "./shared/initializeFleetForUser.js";
import { registerVehicleInUserFleet } from "./register_vehicle_steps.js";
import { generateFrenchPlateNumber } from "../../tests/Utils/generateFrenchPlateNumber.js";
import { User } from "../../src/Domain/Models/User";
import { Vehicle } from "../../src/Domain/Models/Vehicle";
import { InMemoryFleetRepository } from "../../src/Infra/Secondary/Repositories/InMemoryFleetRepository";
import { initializeFleetForUser } from "./shared/initializeFleetForUser";
import { registerVehicleInUserFleet } from "./register_vehicle_steps";
import { generateFrenchPlateNumber } from "../../tests/Utils/generateFrenchPlateNumber";

Given("my fleet", async function (): Promise<void> {
const user: User = User.create(crypto.randomUUID());
Expand Down
12 changes: 5 additions & 7 deletions features/steps/park_vehicle_steps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ import { Given, Then, When } from "@cucumber/cucumber";
import { expect } from "chai";

// Second group: Domain
import { Location } from "../../src/Domain/Models/Location.js";
import { VehicleAlreadyParkedAtThisLocationError } from "../../src/Domain/Errors/VehicleAlreadyParkedAtThisLocationError.js";
import { Location } from "../../src/Domain/Models/Location";
import { VehicleAlreadyParkedAtThisLocationError } from "../../src/Domain/Errors/VehicleAlreadyParkedAtThisLocationError";

// Third group: Helpers
import { parkVehicleAtLocation } from "./shared/parkVehicleAtLocation.js";
import { retrieveLocation } from "./shared/retrieveLocation.js";
import { parkVehicleAtLocation } from "./shared/parkVehicleAtLocation";
import { retrieveLocation } from "./shared/retrieveLocation";

Given("a location", async function (): Promise<void> {
this.context.location = Location.create(48.8566, 2.3522);
Expand Down Expand Up @@ -71,9 +71,7 @@ Then(
const expected = new VehicleAlreadyParkedAtThisLocationError(
this.context.vehicle.plateNumber,
this.context.fleetId,
this.context.location.latitude,
this.context.location.longitude,
this.context.location.altitude,
this.context.location,
);

expect(this.context.parkingAttemptError).to.deep.equal(expected);
Expand Down
12 changes: 6 additions & 6 deletions features/steps/register_vehicle_steps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,17 @@ import { World } from "cucumber";
import { expect } from "chai";

// Second group: Domain
import { User } from "../../src/Domain/Models/User.js";
import { Vehicle } from "../../src/Domain/Models/Vehicle.js";
import { VehicleAlreadyRegisteredError } from "../../src/Domain/Errors/VehicleAlreadyRegisteredError.js";
import { User } from "../../src/Domain/Models/User";
import { Vehicle } from "../../src/Domain/Models/Vehicle";
import { VehicleAlreadyRegisteredError } from "../../src/Domain/Errors/VehicleAlreadyRegisteredError";

// Third group: Helpers
import { initializeFleetForUser } from "./shared/initializeFleetForUser.js";
import { retrieveFleet } from "./shared/retrieveFleet.js";
import { initializeFleetForUser } from "./shared/initializeFleetForUser";
import { retrieveFleet } from "./shared/retrieveFleet";
import {
RegisterVehicle,
RegisterVehicleHandler,
} from "../../src/App/Commands/registerVehicle.js";
} from "../../src/App/Commands/registerVehicle";

Given("the fleet of another user", async function (): Promise<void> {
this.context.otherUser = User.create(crypto.randomUUID());
Expand Down
6 changes: 3 additions & 3 deletions features/steps/shared/initializeFleetForUser.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { FleetRepository } from "../../../src/Domain/Repositories/FleetRepository.js";
import { User } from "../../../src/Domain/Models/User.js";
import { FleetRepository } from "../../../src/Domain/Ports/FleetRepository";
import {
InitializeFleet,
InitializeFleetHandler,
} from "../../../src/App/Commands/initializeFleet.js";
} from "../../../src/App/Commands/initializeFleet";
import { User } from "../../../src/Domain/Models/User";

export async function initializeFleetForUser(
repository: FleetRepository,
Expand Down
6 changes: 3 additions & 3 deletions features/steps/shared/parkVehicleAtLocation.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { Location } from "../../../src/Domain/Models/Location.js";
import { FleetRepository } from "../../../src/Domain/Repositories/FleetRepository.js";
import { Location } from "../../../src/Domain/Models/Location";
import { FleetRepository } from "../../../src/Domain/Ports/FleetRepository";
import {
ParkVehicle,
ParkVehicleHandler,
} from "../../../src/App/Commands/parkVehicle.js";
} from "../../../src/App/Commands/parkVehicle";

export async function parkVehicleAtLocation(
repository: FleetRepository,
Expand Down
9 changes: 3 additions & 6 deletions features/steps/shared/retrieveFleet.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import { Fleet } from "../../../src/Domain/Models/Fleet.js";
import { FleetRepository } from "../../../src/Domain/Repositories/FleetRepository.js";
import {
GetFleet,
GetFleetHandler,
} from "../../../src/App/Queries/getFleet.js";
import { Fleet } from "../../../src/Domain/Models/Fleet";
import { FleetRepository } from "../../../src/Domain/Ports/FleetRepository";
import { GetFleet, GetFleetHandler } from "../../../src/App/Queries/getFleet";

export async function retrieveFleet(
repository: FleetRepository,
Expand Down
6 changes: 3 additions & 3 deletions features/steps/shared/retrieveLocation.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { Location } from "../../../src/Domain/Models/Location.js";
import { FleetRepository } from "../../../src/Domain/Repositories/FleetRepository.js";
import { Location } from "../../../src/Domain/Models/Location";
import { FleetRepository } from "../../../src/Domain/Ports/FleetRepository";
import {
GetLocation,
GetLocationHandler,
} from "../../../src/App/Queries/getLocation.js";
} from "../../../src/App/Queries/getLocation";

export async function retrieveLocation(
repository: FleetRepository,
Expand Down
29 changes: 23 additions & 6 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 4 additions & 6 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
{
"type": "module",
"name": "fulll-backend",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"@eslint/js": "^9.27.0",
"@prisma/client": "^6.8.2",
"chalk": "^5.4.1",
"yargs": "^17.7.2"
},
"devDependencies": {
"@cucumber/cucumber": "^11.2.0",
"@eslint/js": "^9.25.1",
"@types/chai": "^5.2.1",
"@types/cucumber": "^6.0.1",
"@types/node": "^22.14.1",
Expand All @@ -21,17 +20,16 @@
"prettier": "^3.5.3",
"prisma": "^6.8.2",
"ts-node": "^10.9.2",
"tsx": "^4.19.4",
"typescript": "^5.8.3",
"typescript-eslint": "^8.31.0",
"vitest": "^3.1.2"
},
"scripts": {
"generate": "prisma generate --no-hints",
"build": "tsc",
"prepare": "npm run generate && npm run build",
"fleet": "npm run prepare && tsx ./build/src/cli.js",
"cucumber": "cucumber-js --config cucumber.json",
"prepare": "rm -rf dist/ && npm run generate && npm run build",
"fleet": "npm run prepare && ts-node ./dist/src/cli.js",
"cucumber": "cucumber-js",
"cucumber:critical": "cucumber-js --tags \"@critical\"",
"lint": "eslint .",
"test": "vitest"
Expand Down
6 changes: 3 additions & 3 deletions src/App/Commands/initializeFleet.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Command, CommandHandler } from "./command.js";
import { Fleet } from "../../Domain/Models/Fleet.js";
import { FleetRepository } from "../../Domain/Repositories/FleetRepository.js";
import { Command, CommandHandler } from "./command";
import { Fleet } from "../../Domain/Models/Fleet";
import { FleetRepository } from "../../Domain/Ports/FleetRepository";

export class InitializeFleet implements Command {
constructor(public readonly userId: string) {}
Expand Down
8 changes: 4 additions & 4 deletions src/App/Commands/parkVehicle.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Command, CommandHandler } from "./command.js";
import { Location } from "../../Domain/Models/Location.js";
import { FleetRepository } from "../../Domain/Repositories/FleetRepository.js";
import { FleetNotFoundError } from "../../Domain/Errors/FleetNotFoundError.js";
import { Command, CommandHandler } from "./command";
import { Location } from "../../Domain/Models/Location";
import { FleetNotFoundError } from "../../Domain/Errors/FleetNotFoundError";
import { FleetRepository } from "../../Domain/Ports/FleetRepository";

export class ParkVehicle implements Command {
constructor(
Expand Down
6 changes: 3 additions & 3 deletions src/App/Commands/registerVehicle.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Command, CommandHandler } from "./command.js";
import { FleetRepository } from "../../Domain/Repositories/FleetRepository.js";
import { FleetNotFoundError } from "../../Domain/Errors/FleetNotFoundError.js";
import { Command, CommandHandler } from "./command";
import { FleetNotFoundError } from "../../Domain/Errors/FleetNotFoundError";
import { FleetRepository } from "../../Domain/Ports/FleetRepository";

export class RegisterVehicle implements Command {
constructor(
Expand Down
8 changes: 4 additions & 4 deletions src/App/Queries/getFleet.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Query, QueryHandler } from "./query.js";
import { Fleet } from "../../Domain/Models/Fleet.js";
import { FleetRepository } from "../../Domain/Repositories/FleetRepository.js";
import { FleetNotFoundError } from "../../Domain/Errors/FleetNotFoundError.js";
import { Query, QueryHandler } from "./query";
import { Fleet } from "../../Domain/Models/Fleet";
import { FleetNotFoundError } from "../../Domain/Errors/FleetNotFoundError";
import { FleetRepository } from "../../Domain/Ports/FleetRepository";

export class GetFleet implements Query {
constructor(public readonly fleetId: string) {}
Expand Down
8 changes: 4 additions & 4 deletions src/App/Queries/getLocation.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Query, QueryHandler } from "./query.js";
import { Location } from "../../Domain/Models/Location.js";
import { FleetRepository } from "../../Domain/Repositories/FleetRepository.js";
import { FleetNotFoundError } from "../../Domain/Errors/FleetNotFoundError.js";
import { Query, QueryHandler } from "./query";
import { Location } from "../../Domain/Models/Location";
import { FleetNotFoundError } from "../../Domain/Errors/FleetNotFoundError";
import { FleetRepository } from "../../Domain/Ports/FleetRepository";

export class GetLocation implements Query {
constructor(
Expand Down
12 changes: 4 additions & 8 deletions src/Domain/Errors/VehicleAlreadyParkedAtThisLocationError.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
import { Location } from "../Models/Location.js";

export class VehicleAlreadyParkedAtThisLocationError extends Error {
constructor(
vehiclePlateNumber: string,
fleetId: string,
latitude: number,
longitude: number,
altitude: number,
) {
constructor(vehiclePlateNumber: string, fleetId: string, location: Location) {
super(
`Error: Vehicle ${vehiclePlateNumber} of ${fleetId} is already parked at latitude: ${latitude}, longitude: ${longitude}, altitude: ${altitude}`,
`Error: Vehicle ${vehiclePlateNumber} of ${fleetId} is already parked at latitude: ${location.latitude}, longitude: ${location.longitude}, altitude: ${location.altitude}`,
);
this.name = "VehicleAlreadyParkedAtThisLocationError";
}
Expand Down
Loading