# Fiberportal – Coding Guidelines

## Naming Conventions
Tables:
snake_case

Primary keys:
id

Foreign keys:
<entity>_id

## Prefix Rules
Core tables:
fp_*

Module tables:
fp_mod_<module>_*

Examples:
fp_projects
fp_cases
fp_mod_tasks_tasks

## Timestamps
Use:
created_at
updated_at

Optional:
deleted_at

## UUID Usage
Use uuid on important entities exposed in URLs or APIs:
- tenants
- users
- projects
- cases
- tasks

## Code Structure
Controllers:
- request handling
- validation
- response formatting

Services:
- business logic
- workflows
- module rules

Models:
- database access
- reusable query logic

## Multi-Tenant Rules
- Always filter on tenant_id
- Never fetch cross-tenant data by mistake
- Prefer tenant-aware service methods

## Logging Rules
Important changes must be logged in:
fp_audit_logs

## Module Rules
- Each module should be isolated
- Each module should have its own permissions
- Avoid putting module-specific logic in core files unless it is a shared abstraction
