Giter Club home page Giter Club logo

user-management's People

Contributors

jun4928 avatar

Watchers

 avatar

user-management's Issues

enhancement: password requirements

Goals

  • strengthen password requirements

Strategy

  • At least one alphabetical character
  • At least one digit
  • At least one special character (@$!%*#?&)
  • At least 12 characters

feature: user registration and authentication

Goals

  • Create endpoints for user registration with a unique username and a secure password
  • Implement user authentication using JWT

User Strategy

  • Password Strength Requirements: Add password strength requirements and
    implement checks to ensure users create secure passwords
  • JWT Expiration and Refresh Tokens: Implement JWT expiration and consider using
    refresh tokens for a more secure authentication flow.

API Spec

  • POST /users, create a user
  • POST /users/authentication, compare hashed password and issue JWT

Types

type User = {
  id: number
  name: string // unique 
  password: string
}

Service Interfaces

create-user.service

type Input = {
  name: string
  password: string
}

type Output = Promise<User>
  • password should be encoded using bcrypt

authenticate-user.service

type Input = {
  name: string
  password: string
}

type Output = Promise<User | null>
  • password should be compared using bcrypt

In-memory database

  • in-memory database implements this interface
export type CreateUserData = Omit<User, "id">

export interface UserDatabase {
  create(user: CreateUserData): Promise<User>;

  getOne(name: string, password: string): Promise<User | null>;
}

Tests

  • create-user.service.test
  • authenticate-user.service.test

feature: vehicle preferences

Goals

  • Create endpoints to retrieve and update a user's saved vehicles.
  • Simply use in-memory data

API Spec

below APIs need user authentication first,

  • GET /users/vehicles, retrieve all the stored items
  • GET /users/vehicles/:vehicleId, retrieve the specific stored item
  • POST /users/vehicles, create one
  • PUT /users/vehicles/:vehicleId, replace entire stored item with the new body
  • DELETE /users/vehicles/:vehicleId, delete one

Types

type Vehicle = {
  id: number
  brand: string
  model: string
  year: number
}

Service Interfaces

get-users-vehicles.service

type Input = {
  userId: number
  vehicleId: number | null // when null retrieve all
}

type Output = Promise<Vehicle[]>

create-users-vehicles.service

type Input = {
  userId: number
  vehicle: CreateVehicleData
} 

type Output = Promise<Vehicle>

update-users-vehicles.service

type Input = {
  userId: number
  vehicleId: number
  vehicle: UpdateVehicleData
}

type Output = Promise<Vehicle>

delete-users-vehicles.service

type Input = {
  userId: number
  vehicleId: number
}

type Output = Promise<void>

In-memory database

  • in-memory database implements this interface
export type UserVehicle = {
  userId: number;
  vehicle: Vehicle;
};

export type CreateVehicleData = Omit<Vehicle, "id">;

export type UpdateVehicleData = Omit<Vehicle, "id">;

type Result = {
  succeed: boolean;
  reason: string | null;
};

export interface VehicleDatabase {
  getAll(userId: number): Promise<UserVehicle[]>;

  getOne(userId: number, vehicleId: number): Promise<UserVehicle | null>;

  create(userId: number, vehicle: CreateVehicleData): Promise<UserVehicle>;

  updateOne(
    userId: number,
    vehicleId: number,
    vehicle: UpdateVehicleData,
  ): Promise<UserVehicle | Result>;

  deleteOne(userId: number, vehicleId: number): Promise<Result>;

  clear(): Promise<void>;
}

Tests

  • get-users-vehicles.service.test
  • create-users-vehicles.service.test
  • update-users-vehicles.service.test
  • delete-users-vehicles.service.test

enhancement: logger middleware

Goals

  • relevant information about incoming requests, enhancing visibility

middleware

  • it puts logs about
    • Request
      • method
      • ip
      • url
    • Response
      • elapsed time
      • statusCode

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.