Skip to content

Fawry-Intern-Round4/Coupon-API

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Coupon API

The Coupon API provides functionality for managing coupons, validating them, applying discounts, and handling coupon consumption. This API is part of a larger e-commerce system where coupons can be created, activated, deactivated, and applied to orders.

Overview

The Coupon API includes endpoints for:

  • Creating and managing coupons.
  • Validating and applying coupons to orders.
  • Handling coupon consumption for tracking and analytics.
  • Calculating discounts based on the coupon details.

Endpoints

Create Coupon

  • URL: /coupon
  • Method: POST
  • Description: Creates a new coupon.
  • Request Body:
    {
      "remainingUsages": "integer",
      "expiryDate": "yyyy-mm-dd",
      "value": "decimal",
      "active": "boolean",
      "type": "coupon_type"
    }
  • Response:
    {
      "code": "string",
      "remainingUsages": "integer",
      "expiryDate": "yyyy-mm-dd",
      "value": "decimal",
      "active": "boolean",
      "type": "coupon_type"
    }
  • Response Code: 201 Created

Get All Coupons

  • URL: /coupon
  • Method: GET
  • Description: Retrieves all coupons or filters coupons by their active status.
  • Query Parameter: isActive (Boolean, optional)
  • Response:
    [
      {
        "code": "string",
        "remainingUsages": "integer",
        "expiryDate": "yyyy-mm-dd",
        "value": "decimal",
        "active": "boolean",
        "type": "coupon_type"
      }
    ]
  • Response Code: 200 OK

Get Coupon by Code

  • URL: /coupon/{code}
  • Method: GET
  • Description: Retrieves the details of a specific coupon by its code.
  • Path Variable: code (String)
  • Response:
    {
      "code": "string",
      "remainingUsages": "integer",
      "expiryDate": "yyyy-mm-dd",
      "value": "decimal",
      "active": "boolean",
      "type": "coupon_type"
    }
  • Response Code: 200 OK

Activate Coupon

  • URL: /coupon/activation/{code}
  • Method: PUT
  • Description: Activates a coupon by its code.
  • Path Variable: code (String)
  • Response:
    {
      "code": "string",
      "remainingUsages": "integer",
      "expiryDate": "yyyy-mm-dd",
      "value": "decimal",
      "active": "boolean",
      "type": "coupon_type"
    }
  • Response Code: 200 OK

Deactivate Coupon

  • URL: /coupon/deactivation/{code}
  • Method: PUT
  • Description: Deactivates a coupon by its code.
  • Path Variable: code (String)
  • Response:
    {
      "code": "string",
      "remainingUsages": "integer",
      "expiryDate": "yyyy-mm-dd",
      "value": "decimal",
      "active": "boolean",
      "type": "coupon_type"
    }
  • Response Code: 200 OK

Validate Coupon

  • URL: /coupon/validation
  • Method: GET
  • Description: Validates a coupon code for a customer.
  • Query Parameters:
    • code (String, required)
    • customerEmail (String, required)
  • Response Code: 200 OK

Calculate Discount

  • URL: /coupon/discount
  • Method: GET
  • Description: Calculates the discount for an order based on the coupon.
  • Query Parameters:
    • code (String, required)
    • customerEmail (String, required)
    • orderPrice (Decimal, required)
  • Response:
    {
      "discountAmount": "decimal"
    }
  • Response Code: 200 OK

Consume Coupon

  • URL: /coupon/consumption
  • Method: POST
  • Description: Consumes a coupon for a specific order.
  • Request Body:
    {
      "code": "string",
      "customerEmail": "string",
      "orderPrice": "decimal",
      "orderId": "long"
    }
  • Response:
    {
      "id": "long",
      "consumptionDate": "yyyy-mm-dd'T'HH:mm:ss.SSSZ",
      "orderId": "long",
      "actualDiscount": "decimal",
      "customerEmail": "string",
      "couponId": "long",
      "couponCode": "string",
      "couponValue": "decimal"
    }
  • Response Code: 201 Created

Data Models

Coupon DTO

  • code: Coupon code (String)
  • remainingUsages: Number of remaining usages for the coupon (Integer)
  • expiryDate: Expiry date of the coupon (LocalDate)
  • value: The discount value of the coupon (BigDecimal)
  • active: Indicates whether the coupon is active (Boolean)
  • type: Type of the coupon (CouponType)

Consumption DTO

  • id: Unique identifier for the consumption (Long)
  • consumptionDate: Date and time the coupon was consumed (Instant)
  • orderId: The order ID associated with the consumption (Long)
  • actualDiscount: The actual discount applied (BigDecimal)
  • customerEmail: Email of the customer who used the coupon (String)
  • couponId: ID of the coupon used (Long)
  • couponCode: Code of the coupon used (String)
  • couponValue: Value of the coupon (BigDecimal)

Configuration

  • Configure the database connection in the application.properties file:
    spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name
    spring.datasource.username=your_db_username
    spring.datasource.password=your_db_password

Releases

No releases published

Packages

No packages published

Languages