CLONESAHIBINDEN
FRONTEND GUIDE FOR AI CODING AGENTS - PART 1 - Authentication Management
This document is the first part of a REST API guide for the clonesahibinden project. It is designed for AI agents that will generate frontend code to consume the project’s backend.
This first document includes general information about the project and its authentication management. Please read it carefully and implement all requirements described here.
The project has 1 auth service, 1 notification service, 1 BFF service, and 7 business services, plus other helper services such as bucket and realtime. In this document you will be informed only about the auth service. The initial frontend will be generated to use this service.
Each service is a separate microservice application and listens for HTTP requests at different service URLs.
Services may be deployed to the preview server, staging server, or production server. Therefore, each service has 3 access URLs. The frontend application must support all deployment environments during development, and the user should be able to select the target API server on the home page.
Project Introduction
clonesahibinden is a scalable classified ads platform where users can register, list items across multiple categories such as vehicles, real estate, goods, and jobs, interact via messaging, and manage their listings with support for premium ad features and role-based moderation. The platform offers advanced category management, powerful search and filtering, and a comprehensive admin and moderation dashboard.
API Structure
Object Structure of a Successful Response
When the service processes requests successfully, it wraps the requested resource(s) within a JSON envelope. This envelope includes the data and essential metadata such as configuration details and pagination information, providing context to the client.
HTTP Status Codes:
- 200 OK: Returned for successful GET, LIST, UPDATE, or DELETE operations, indicating that the request was processed successfully.
- 201 Created: Returned for CREATE operations, indicating that the resource was created successfully.
Success Response Format:
For successful operations, the response includes a
"status": "OK" property, signaling
that the request executed successfully. The structure of a successful
response is outlined below:
{
"status":"OK",
"statusCode": 200,
"elapsedMs":126,
"ssoTime":120,
"source": "db",
"cacheKey": "hexCode",
"userId": "ID",
"sessionId": "ID",
"requestId": "ID",
"dataName":"products",
"method":"GET",
"action":"list",
"appVersion":"Version",
"rowCount":3,
"products":[{},{},{}],
"paging": {
"pageNumber":1,
"pageRowCount":25,
"totalRowCount":3,
"pageCount":1
},
"filters": [],
"uiPermissions": []
}
-
products: In this example, this key contains the actual response content, which may be a single object or an array of objects depending on the operation.
Additional Data
Each API may include additional data besides the main data object, depending on the business logic of the API. These will be provided in each API’s response signature.
Error Response
If a request encounters an issue—whether due to a logical fault or a technical problem—the service responds with a standardized JSON error structure. The HTTP status code indicates the nature of the error, using commonly recognized codes for clarity:
- 400 Bad Request: The request was improperly formatted or contained invalid parameters.
- 401 Unauthorized: The request lacked a valid authentication token; login is required.
- 403 Forbidden: The current token does not grant access to the requested resource.
- 404 Not Found: The requested resource was not found on the server.
- 500 Internal Server Error: The server encountered an unexpected condition.
Each error response is structured to provide meaningful insight into the problem, assisting in efficient diagnosis and resolution.
{
"result": "ERR",
"status": 400,
"message": "errMsg_organizationIdisNotAValidID",
"errCode": 400,
"date": "2024-03-19T12:13:54.124Z",
"detail": "String"
}
Accessing the backend
Each backend service has its own URL for each deployment environment. Users may want to test the frontend in one of the three deployments—preview, staging, or production. Please ensure that the home page includes a deployment server selection option so that, as the frontend coding agent, you can set the base URL for all services.
The base URL of the application in each environment is as follows:
-
Preview:
https://clonesahibinden.prw.mindbricks.com -
Staging:
https://clonesahibinden-stage.mindbricks.co -
Production:
https://clonesahibinden.mindbricks.co
For the auth service, the base URLs are:
-
Preview:
https://clonesahibinden.prw.mindbricks.com/auth-api -
Staging:
https://clonesahibinden-stage.mindbricks.co/auth-api -
Production:
https://clonesahibinden.mindbricks.co/auth-api
For each other service, the service base URL will be given in the service sections.
Any request that requires login must include a valid token in the Bearer authorization header.
Please note that for each service in the project (which will be introduced in following pages) will use a different address so it is a good practice to define a separate client for each service in the frontend application lib source. Not only the different base urls, some services even may need different access rules when shaping the request.
Home page
First build a home page which shows some static content about the application, and has got login and registration (if is public) buttons. The home page shpuld be updated later according to the content that each service provides, as a frontend developer use best and common practices to reflect the service content to the home page. User may also give extra information for the home page content in addtion to this prompt.
Note that this page should include a deployment (environment)
selection option to set the base URL. Set the default to
production.
After user logs in, page header should show the current login state as in modern web pages, logged in user fullname, avatar, email and with a logout link, make a fancy current user component. The home page may have different views before and after login.
Registration Management
User Registration
User registration is public in the application, ensure that the register and login pages include a deployment server selection option so that you can set the base URL for all services. Start with a home page and set up the registration , verification, and login flow.
Using the registeruser route of the auth API, send the
required fields from your registration page. Please create a simple
and polished registration page that includes only the necessary fields
of the registration API.
The registerUser API in the auth service is
described with the request and response structure below.
Note that since the registerUser API is a business API,
it is versioned; call it with the given version like
/v1/registeruser.
Register User API
This api is used by public users to register themselves
Rest Route
The registerUser API REST controller can be triggered via
the following route:
/v1/registeruser
Rest Request Parameters
The registerUser api has got 6 regular request parameters
| Parameter | Type | Required | Population |
|---|---|---|---|
| avatar | String | false | request.body?.[“avatar”] |
| password | String | true | request.body?.[“password”] |
| fullname | String | true | request.body?.[“fullname”] |
| String | true | request.body?.[“email”] | |
| mobile | String | false | request.body?.[“mobile”] |
| userType | Enum | false | request.body?.[“userType”] |
| avatar : The avatar url of the user. If not sent, a default random one will be generated. | |||
| password : The password defined by the the user that is being registered. | |||
| fullname : The fullname defined by the the user that is being registered. | |||
| email : The email defined by the the user that is being registered. | |||
| mobile : The mobile number defined by the the user that is being registered. | |||
| userType : Indicates whether the user is an individual or a corporate account. |
REST Request To access the api you can use the REST controller with the path POST /v1/registeruser
axios({
method: 'POST',
url: '/v1/registeruser',
data: {
avatar:"String",
password:"String",
fullname:"String",
email:"String",
mobile:"String",
userType:"Enum",
},
params: {
}
});
REST Response
{
"status": "OK",
"statusCode": "201",
"elapsedMs": 126,
"ssoTime": 120,
"source": "db",
"cacheKey": "hexCode",
"userId": "ID",
"sessionId": "ID",
"requestId": "ID",
"dataName": "user",
"method": "POST",
"action": "create",
"appVersion": "Version",
"rowCount": 1,
"user": {
"id": "ID",
"email": "String",
"password": "String",
"fullname": "String",
"avatar": "String",
"roleId": "String",
"mobile": "String",
"mobileVerified": "Boolean",
"emailVerified": "Boolean",
"userType": "Enum",
"userType_idx": "Integer",
"isActive": true,
"recordVersion": "Integer",
"createdAt": "Date",
"updatedAt": "Date",
"_owner": "ID"
}
}
After a successful registration, the frontend code should handle any verification requirements. Verification Management will be given in teh next prompt.
The registration response will include a user object in
the root envelope; this object contains user information with an
id field.
Login Management
After successful registration and completing any required
verifications, the user can log in. Please create a minimal, polished
login page where the user can enter email and password. Note that this
page should respect the deployment (environment) selection option made
in the home page to set the base URL. If the user reaches this page
directly skipping home page, the default
productiondeployment will be used.
The login API returns a created session. This session can be retrieved
later with the access token using the /currentuser system
route.
Any request that requires login must include a valid token. When a
user logs in successfully, the response JSON includes a JWT access
token in the accessToken field. Under normal conditions,
this token is also set as a cookie and consumed automatically.
However, since AI coding agents’ preview options may fail to use
cookies, ensure that each request includes the access token in the
Bearer authorization header.
If the login fails due to verification requirements, the response JSON
includes an errCode. If it is
EmailVerificationNeeded, start the email verification
flow; if it is MobileVerificationNeeded, start the mobile
verification flow.
After a successful login, you can access session (user) information at
any time with the /currentuser API. On inner pages, show
brief profile information (avatar, name, etc.) using the session
information from this API.
Note that the currentuser API returns a session object,
so there is no id property; instead, the values for the
user and session are exposed as userId and
sessionId. The response combines user and session
information.
The login, logout, and currentuser APIs are as follows. They are system routes and are not versioned.
POST /login — User Login
Purpose: Verifies user credentials and creates an authenticated session with a JWT access token.
Access Routes:
Request Parameters
| Parameter | Type | Required | Source |
|---|---|---|---|
username |
String | Yes | request.body.username |
password |
String | Yes | request.body.password |
Behavior
- Authenticates credentials and returns a session object.
-
Sets cookie:
projectname-access-token[-tenantCodename] - Adds the same token in response headers.
-
Accepts either
usernameoremailfields (if both exist,usernameis prioritized).
Example
axios.post("/login", {
username: "user@example.com",
password: "securePassword"
});
Success Response
{
"sessionId": "e81c7d2b-4e95-9b1e-842e-3fb9c8c1df38",
"userId": "d92b9d4c-9b1e-4e95-842e-3fb9c8c1df38",
"email": "user@example.com",
"fullname": "John Doe",
//...
"accessToken": "ey7....",
"userBucketToken": "e56d...."
}
Error Responses
401 Unauthorized: Invalid credentials-
403 Forbidden: Email/mobile verification or 2FA pending 400 Bad Request: Missing parameters
POST /logout — User Logout
Purpose: Terminates the current session and clears associated authentication tokens.
Behavior
- Invalidates the session (if it exists).
-
Clears cookie
projectname-access-token[-tenantCodename]. - Returns a confirmation response (always
200 OK).
Example
axios.post("/logout", {}, {
headers: { "Authorization": "Bearer your-jwt-token" }
});
Notes
- Can be called without a session (idempotent behavior).
- Works for both cookie-based and token-based sessions.
Success Response
{ "status": "OK", "message": "User logged out successfully" }
GET /currentuser — Current Session
Purpose Returns the currently authenticated user’s session.
Route Type sessionInfo
Authentication Requires a valid access token (header or cookie).
Request
No parameters.
Example
axios.get("/currentuser", {
headers: { Authorization: "Bearer <jwt>" }
});
Success (200)
Returns the session object (identity, tenancy, token metadata):
{
"sessionId": "9cf23fa8-07d4-4e7c-80a6-ec6d6ac96bb9",
"userId": "d92b9d4c-9b1e-4e95-842e-3fb9c8c1df38",
"email": "user@example.com",
"fullname": "John Doe",
"roleId": "user",
"tenantId": "abc123",
"accessToken": "jwt-token-string",
"...": "..."
}
Note that the currentuser API returns a session object,
so there is no id property, instead, the values for the
user and session are exposed as userId and
sessionId. The response is a mix of user and session
information.
Errors
-
401 Unauthorized — No active session/token
{ "status": "ERR", "message": "No login found" }
Notes
- Commonly called by web/mobile clients after login to hydrate session state.
- Includes key identity/tenant fields and a token reference (if applicable).
- Ensure a valid token is supplied to receive a 200 response.
After you complete this first step, please ensure you have not made the following common mistakes:
-
When the application starts, please ensure that the
baseUrlis set to the production server URL, and that the environment selector dropdown has the Production option selected by default. -
Note that any api call to the application backend is based on a
service base url, in this propmpt all auth apis should be called by
/auth-apiprefix after application’s base url. -
The
/currentuserAPI returns a mix of session and user data. There is noidproperty —useuserIdandsessionId. - Please note that, the deployemnt environment selector will only be used in the home page. If any page is called directly bypassign home page, the page will use the stored or default environment.
After this prompt, the user may give you new instructions to update your first output or provide subsequent prompts about the project.