# dcane4ever/eac-file-directory architecture

> Architecture diagram of the GitHub repository dcane4ever/eac-file-directory, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dcane4ever/eac-file-directory
- Repository: https://github.com/dcane4ever/eac-file-directory

## Overview

This is a Spring-based academic file directory: users discover and download approved materials, while contributors upload files for moderation and administrators manage the catalog and storage. The tree shows distinct browse, upload, access-control, collaboration, and maintenance capabilities; sampled service code confirms several integrations among them. The README is empty, and most controllers and domain services were not excerpted, so uncertain workflow links are marked dashed rather than presented as verified calls.

Main entry points: [`src/main/java/ph/edu/eac/filedirectory/file/FileEntity.java`](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/file/FileEntity.java) (File records), [`src/main/java/ph/edu/eac/filedirectory/file/FileStorageService.java`](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/file/FileStorageService.java) (Stored files), [`src/main/java/ph/edu/eac/filedirectory/web/BrowseController.java`](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/web/BrowseController.java) (Browse and search), [`src/main/java/ph/edu/eac/filedirectory/web/UploadController.java`](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/web/UploadController.java) (Upload workflow)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_accounts["Accounts and governance"]
  node_users[("Accounts<br/>[AppUser.java]")]
  node_auth["Authentication"]
  node_admin["Admin controls"]
end

subgraph group_catalog["File catalog"]
  node_taxonomy[("Academic taxonomy<br/>[Department.java]")]
  node_browse["Browse and search"]
  node_file_records[("File records<br/>[FileEntity.java]")]
  node_file_store[("Stored files")]
  node_upload["Upload workflow"]
  node_moderation["File moderation"]
  node_references["Reference extraction"]
  node_author_detection["Author detection"]
  node_citations["Citations"]
  node_office["Office preview"]
end

subgraph group_access["Access and collaboration"]
  node_access_requests["Access requests"]
  node_private_shares["Private sharing"]
  node_follows["Followed topics<br/>[FollowService.java]"]
  node_notifications[("Notifications")]
end

subgraph group_operations["Administration and tools"]
  node_audit[("Audit trail<br/>[AuditService.java]")]
  node_maintenance["Storage maintenance"]
  node_maintenance_web["Maintenance console"]
  node_settings[("System settings")]
end

node_visitor(("Directory user"))

node_visitor -.->|"browses"| node_browse
node_visitor -.->|"submits files"| node_upload
node_visitor -.->|"signs in"| node_auth
node_browse -.->|"queries catalog"| node_file_records
node_browse -.->|"filters by"| node_taxonomy
node_upload -.->|"stores content"| node_file_store
node_upload -.->|"creates record"| node_file_records
node_moderation -.->|"updates status"| node_file_records
node_access_requests -->|"notifies users"| node_notifications
node_access_requests -->|"records actions"| node_audit
node_private_shares -->|"notifies recipient"| node_notifications
node_private_shares -->|"records sharing"| node_audit
node_follows -->|"notifies followers"| node_notifications
node_maintenance_web -->|"scans storage"| node_maintenance
node_maintenance -->|"checks stored files"| node_file_store
node_maintenance -->|"checks references"| node_file_records
node_maintenance_web -->|"records cleanup"| node_audit
node_references -.->|"reads documents"| node_file_store
node_author_detection -.->|"reads documents"| node_file_store
node_office -->|"uses file metadata"| node_file_records
node_admin -.->|"manages settings"| node_settings
node_auth -.->|"authenticates accounts"| node_users

click node_users "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/user/AppUser.java"
click node_auth "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/web/AuthController.java"
click node_admin "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/web/AdminController.java"
click node_taxonomy "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/taxonomy/Department.java"
click node_browse "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/web/BrowseController.java"
click node_file_records "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/file/FileEntity.java"
click node_file_store "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/file/FileStorageService.java"
click node_upload "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/web/UploadController.java"
click node_moderation "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/web/AdminController.java"
click node_references "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/reference/ReferenceExtractionService.java"
click node_author_detection "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/reference/AuthorDetectionService.java"
click node_citations "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/citation/CitationService.java"
click node_office "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/onlyoffice/OnlyOfficeService.java"
click node_access_requests "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/access/AccessRequestService.java"
click node_private_shares "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/share/PrivateShareService.java"
click node_follows "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/follow/FollowService.java"
click node_notifications "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/notification/NotificationService.java"
click node_audit "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/audit/AuditService.java"
click node_maintenance "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/maintenance/StorageMaintenanceService.java"
click node_maintenance_web "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/web/StorageMaintenanceController.java"
click node_settings "https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/settings/SystemSettingService.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_users,node_auth,node_admin,node_visitor toneBlue
class node_taxonomy,node_browse,node_file_records,node_file_store,node_upload,node_moderation,node_references,node_author_detection,node_citations,node_office toneAmber
class node_access_requests,node_private_shares,node_follows,node_notifications toneMint
class node_audit,node_maintenance,node_maintenance_web,node_settings toneRose
```

## Components

### Accounts and governance

- [Accounts](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/user/AppUser.java): `src/main/java/ph/edu/eac/filedirectory/user/AppUser.java`
- [Authentication](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/web/AuthController.java): `src/main/java/ph/edu/eac/filedirectory/web/AuthController.java`
- [Admin controls](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/web/AdminController.java): `src/main/java/ph/edu/eac/filedirectory/web/AdminController.java`

### File catalog

- [Academic taxonomy](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/taxonomy/Department.java): `src/main/java/ph/edu/eac/filedirectory/taxonomy/Department.java`
- [Browse and search](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/web/BrowseController.java): `src/main/java/ph/edu/eac/filedirectory/web/BrowseController.java`
- [File records](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/file/FileEntity.java): `src/main/java/ph/edu/eac/filedirectory/file/FileEntity.java`
- [Stored files](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/file/FileStorageService.java): `src/main/java/ph/edu/eac/filedirectory/file/FileStorageService.java`
- [Upload workflow](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/web/UploadController.java): `src/main/java/ph/edu/eac/filedirectory/web/UploadController.java`
- [File moderation](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/web/AdminController.java): `src/main/java/ph/edu/eac/filedirectory/web/AdminController.java`
- [Reference extraction](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/reference/ReferenceExtractionService.java): `src/main/java/ph/edu/eac/filedirectory/reference/ReferenceExtractionService.java`
- [Author detection](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/reference/AuthorDetectionService.java): `src/main/java/ph/edu/eac/filedirectory/reference/AuthorDetectionService.java`
- [Citations](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/citation/CitationService.java): `src/main/java/ph/edu/eac/filedirectory/citation/CitationService.java`
- [Office preview](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/onlyoffice/OnlyOfficeService.java): `src/main/java/ph/edu/eac/filedirectory/onlyoffice/OnlyOfficeService.java`

### Access and collaboration

- [Access requests](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/access/AccessRequestService.java): `src/main/java/ph/edu/eac/filedirectory/access/AccessRequestService.java`
- [Private sharing](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/share/PrivateShareService.java): `src/main/java/ph/edu/eac/filedirectory/share/PrivateShareService.java`
- [Followed topics](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/follow/FollowService.java): `src/main/java/ph/edu/eac/filedirectory/follow/FollowService.java`
- [Notifications](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/notification/NotificationService.java): `src/main/java/ph/edu/eac/filedirectory/notification/NotificationService.java`

### Administration and tools

- [Audit trail](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/audit/AuditService.java): `src/main/java/ph/edu/eac/filedirectory/audit/AuditService.java`
- [Storage maintenance](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/maintenance/StorageMaintenanceService.java): `src/main/java/ph/edu/eac/filedirectory/maintenance/StorageMaintenanceService.java`
- [Maintenance console](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/web/StorageMaintenanceController.java): `src/main/java/ph/edu/eac/filedirectory/web/StorageMaintenanceController.java`
- [System settings](https://github.com/dcane4ever/eac-file-directory/blob/main/src/main/java/ph/edu/eac/filedirectory/settings/SystemSettingService.java): `src/main/java/ph/edu/eac/filedirectory/settings/SystemSettingService.java`

### Other components

- **Directory user**

## Connections

- Directory user → Browse and search: browses
- Directory user → Upload workflow: submits files
- Directory user → Authentication: signs in
- Browse and search → File records: queries catalog
- Browse and search → Academic taxonomy: filters by
- Upload workflow → Stored files: stores content
- Upload workflow → File records: creates record
- File moderation → File records: updates status (evidence: `src/main/java/ph/edu/eac/filedirectory/web/AdminController.java`)
- Access requests → Notifications: notifies users (evidence: `src/main/java/ph/edu/eac/filedirectory/access/AccessRequestService.java`)
- Access requests → Audit trail: records actions (evidence: `src/main/java/ph/edu/eac/filedirectory/access/AccessRequestService.java`)
- Private sharing → Notifications: notifies recipient (evidence: `src/main/java/ph/edu/eac/filedirectory/share/PrivateShareService.java`)
- Private sharing → Audit trail: records sharing (evidence: `src/main/java/ph/edu/eac/filedirectory/share/PrivateShareService.java`)
- Followed topics → Notifications: notifies followers (evidence: `src/main/java/ph/edu/eac/filedirectory/follow/FollowService.java`)
- Maintenance console → Storage maintenance: scans storage (evidence: `src/main/java/ph/edu/eac/filedirectory/web/StorageMaintenanceController.java`)
- Storage maintenance → Stored files: checks stored files (evidence: `src/main/java/ph/edu/eac/filedirectory/maintenance/StorageMaintenanceService.java`)
- Storage maintenance → File records: checks references (evidence: `src/main/java/ph/edu/eac/filedirectory/maintenance/StorageMaintenanceService.java`)
- Maintenance console → Audit trail: records cleanup (evidence: `src/main/java/ph/edu/eac/filedirectory/web/StorageMaintenanceController.java`)
- Reference extraction → Stored files: reads documents (evidence: `src/main/java/ph/edu/eac/filedirectory/reference/ReferenceExtractionService.java`)
- Author detection → Stored files: reads documents (evidence: `src/main/java/ph/edu/eac/filedirectory/reference/AuthorDetectionService.java`)
- Office preview → File records: uses file metadata (evidence: `src/main/java/ph/edu/eac/filedirectory/onlyoffice/OnlyOfficeService.java`)
- Admin controls → System settings: manages settings
- Authentication → Accounts: authenticates accounts
