Fix app_users.configid mismatch blocking Staff/Rider first login
UsersPanel.tsx was sending configid: 15 (Staff) / 6 (Rider) when creating users, copied from an unrelated Hasura "role config" convention. Every login call (auth.ts) queries app_users with configid: 1, so any account created with 15/6 could never be found on login and was stuck before it even reached the password-setup step. Both create paths and the CreateUserInput default now consistently use configid: 1. Also fixes getRiderLogs() calling riders/getriderlogs, which 404s since the backend only registers this route under /partners.
This commit is contained in:
@@ -105,8 +105,12 @@ export default function UsersPanel({ tenantId = FIESTA_TENANT_ID, defaultNewUser
|
|||||||
// Selectable roles for the Add User modal - limited to Staff and Rider.
|
// Selectable roles for the Add User modal - limited to Staff and Rider.
|
||||||
const roleChoices = React.useMemo(() => {
|
const roleChoices = React.useMemo(() => {
|
||||||
return [
|
return [
|
||||||
{ id: 4, label: 'Staff', desc: 'Standard store staff duties', icon: User, configid: 15 },
|
// configid must be 1 here — it's the same app_users.configid column the
|
||||||
{ id: 5, label: 'Rider', desc: 'Delivery fleet rider', icon: Bike, configid: 6 },
|
// login endpoints filter on (auth.ts hardcodes configid: 1 for every
|
||||||
|
// login attempt), not the unrelated Hasura "role config" id. Any other
|
||||||
|
// value means the account can never be found on login.
|
||||||
|
{ id: 4, label: 'Staff', desc: 'Standard store staff duties', icon: User, configid: 1 },
|
||||||
|
{ id: 5, label: 'Rider', desc: 'Delivery fleet rider', icon: Bike, configid: 1 },
|
||||||
];
|
];
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
@@ -247,7 +251,7 @@ export default function UsersPanel({ tenantId = FIESTA_TENANT_ID, defaultNewUser
|
|||||||
email: newUser.email,
|
email: newUser.email,
|
||||||
contactno: newUser.contactno,
|
contactno: newUser.contactno,
|
||||||
roleid: Number(newUser.roleid),
|
roleid: Number(newUser.roleid),
|
||||||
configid: selectedRole?.configid ?? 15,
|
configid: selectedRole?.configid ?? 1,
|
||||||
// Store binding — sent exactly as the backend expects so the user is tied
|
// Store binding — sent exactly as the backend expects so the user is tied
|
||||||
// to the chosen branch (tenantid + locationid + applocationid).
|
// to the chosen branch (tenantid + locationid + applocationid).
|
||||||
tenantid: tenantId,
|
tenantid: tenantId,
|
||||||
|
|||||||
@@ -943,7 +943,11 @@ export interface CreateUserInput {
|
|||||||
/** Optional — merchant_web's create form doesn't collect one. */
|
/** Optional — merchant_web's create form doesn't collect one. */
|
||||||
password?: string;
|
password?: string;
|
||||||
roleid: number;
|
roleid: number;
|
||||||
/** Role config (the selected role's configid) — matches merchant_web's create payload. */
|
/**
|
||||||
|
* app_users.configid — the same column every login call filters on
|
||||||
|
* (auth.ts hardcodes configid: 1). Must stay 1 or the account can never
|
||||||
|
* be found on login; this is NOT the unrelated Hasura "role config" id.
|
||||||
|
*/
|
||||||
configid?: number;
|
configid?: number;
|
||||||
/** Business module id (merchant_web sends the logged-in user's; 0 when absent). */
|
/** Business module id (merchant_web sends the logged-in user's; 0 when absent). */
|
||||||
moduleid?: number;
|
moduleid?: number;
|
||||||
@@ -975,7 +979,7 @@ export async function createUser(input: CreateUserInput): Promise<Row> {
|
|||||||
dialcode: input.dialcode ?? '+91',
|
dialcode: input.dialcode ?? '+91',
|
||||||
contactno: input.contactno,
|
contactno: input.contactno,
|
||||||
roleid: input.roleid,
|
roleid: input.roleid,
|
||||||
configid: input.configid ?? 15,
|
configid: input.configid ?? 1,
|
||||||
moduleid: input.moduleid ?? 0,
|
moduleid: input.moduleid ?? 0,
|
||||||
pin: input.pin ?? 0,
|
pin: input.pin ?? 0,
|
||||||
address: input.address ?? '',
|
address: input.address ?? '',
|
||||||
@@ -1138,7 +1142,7 @@ export async function getRiderPeriodicLogs(opts: {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** /riders/getriderlogs?userid=&riderid=&fromdate=&todate=&tenantid=&applocationid= —
|
/** /partners/getriderlogs?userid=&riderid=&fromdate=&todate=&tenantid=&applocationid= —
|
||||||
* full telemetry logs (GPS traces, events, etc.) for a rider. */
|
* full telemetry logs (GPS traces, events, etc.) for a rider. */
|
||||||
export async function getRiderLogs(opts: {
|
export async function getRiderLogs(opts: {
|
||||||
userid?: number;
|
userid?: number;
|
||||||
@@ -1151,7 +1155,7 @@ export async function getRiderLogs(opts: {
|
|||||||
pagesize?: number;
|
pagesize?: number;
|
||||||
}): Promise<Row[]> {
|
}): Promise<Row[]> {
|
||||||
return toRows(
|
return toRows(
|
||||||
await fiestaGet('riders/getriderlogs', {
|
await fiestaGet('partners/getriderlogs', {
|
||||||
userid: opts.userid,
|
userid: opts.userid,
|
||||||
riderid: opts.riderid,
|
riderid: opts.riderid,
|
||||||
fromdate: opts.fromdate,
|
fromdate: opts.fromdate,
|
||||||
|
|||||||
Reference in New Issue
Block a user