# anjumsohail/rfid.syncservice architecture

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

- Interactive diagram: https://gitdiagram.com/anjumsohail/rfid.syncservice
- Repository: https://github.com/anjumsohail/rfid.syncservice

## Overview

RFID.SyncService is a Windows Service with two independently enabled synchronization workflows: RFID/user synchronization and ZKTeco attendance collection. The documented flow runs from the service host through a worker and domain service, then through the workflow’s database repositories and shared device infrastructure. The graph preserves the documented workflow stages and major capabilities; source excerpts were unavailable, so internal call ownership beyond the README’s architecture is not inferred.

Main entry points: [`RFID_SyncService/RFIDSync/Services/SyncOrchestrator.vb`](https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/RFIDSync/Services/SyncOrchestrator.vb) (Sync Orchestrator), [`RFID_SyncService/INOutSync/Services/AttendanceSyncService.vb`](https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/INOutSync/Services/AttendanceSyncService.vb) (Attendance Sync), [`RFID_SyncService/Shared/Database`](https://github.com/anjumsohail/rfid.syncservice/tree/main/RFID_SyncService/Shared/Database) (Database Factories), [`RFID_SyncService/Shared/Devices/ZKteco/ZktecoDeviceClient.vb`](https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/Shared/Devices/ZKteco/ZktecoDeviceClient.vb) (ZKTeco Client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_host["Service Hosting"]
  node_service_host["Service Host<br/>[ServiceHost.vb]"]
end

subgraph group_rfid["RFID Synchronization"]
  node_rfid_worker["RFID Worker<br/>[SyncWorker.vb]"]
  node_rfid_orchestrator["Sync Orchestrator"]
  node_master_import["Master Enrollment Import"]
  node_rfid_device_sync["Device User Sync"]
  node_rfid_repositories["RFID Repositories"]
  node_rfid_models["RFID Sync Models"]
end

subgraph group_attendance["Attendance Synchronization"]
  node_attendance_worker["Attendance Worker"]
  node_attendance_service["Attendance Sync"]
  node_attendance_repositories["Attendance Repositories"]
  node_attendance_models["Attendance Models"]
end

subgraph group_shared["Shared Infrastructure"]
  node_database_factories["Database Factories"]
  node_device_client["ZKTeco Client"]
  node_device_models["Shared Device Models"]
  node_configuration["Configuration<br/>[AppSettings.vb]"]
  node_logging["File Logger<br/>[FileLogger.vb]"]
  node_notifications["Sync Notifications<br/>[SyncNotifier.vb]"]
end

node_oracle[("Oracle Database")]
node_access[("Microsoft Access")]
node_zkteco["ZKTeco Devices"]
node_email["Email Service"]

node_service_host -->|"starts"| node_rfid_worker
node_service_host -->|"starts"| node_attendance_worker
node_rfid_worker -->|"runs cycle"| node_rfid_orchestrator
node_rfid_orchestrator -->|"imports enrollment"| node_master_import
node_rfid_orchestrator -->|"synchronizes users"| node_rfid_device_sync
node_rfid_orchestrator -->|"loads data"| node_rfid_repositories
node_rfid_orchestrator -->|"processes results"| node_rfid_models
node_rfid_device_sync -->|"updates devices"| node_device_client
node_rfid_orchestrator -->|"selects devices"| node_device_client
node_attendance_worker -->|"runs cycle"| node_attendance_service
node_attendance_service -->|"processes attendance"| node_attendance_repositories
node_attendance_service -->|"handles records"| node_attendance_models
node_attendance_service -->|"reads logs"| node_device_client
node_rfid_repositories -->|"creates connections"| node_database_factories
node_attendance_repositories -->|"creates connections"| node_database_factories
node_database_factories -->|"connects"| node_oracle
node_database_factories -->|"connects"| node_access
node_device_client -->|"communicates"| node_zkteco
node_rfid_orchestrator -->|"reads settings"| node_configuration
node_attendance_service -->|"reads settings"| node_configuration
node_rfid_orchestrator -->|"logs cycle"| node_logging
node_attendance_service -->|"logs cycle"| node_logging
node_rfid_orchestrator -.->|"notifies"| node_notifications
node_notifications -.->|"sends email"| node_email

click node_service_host "https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/ServiceHost.vb"
click node_rfid_worker "https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/RFIDSync/Services/SyncWorker.vb"
click node_rfid_orchestrator "https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/RFIDSync/Services/SyncOrchestrator.vb"
click node_master_import "https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/RFIDSync/Services/MasterEnrollmentImportService.vb"
click node_rfid_device_sync "https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/RFIDSync/Services/DeviceSyncService.vb"
click node_rfid_repositories "https://github.com/anjumsohail/rfid.syncservice/tree/main/RFID_SyncService/RFIDSync/Repositories"
click node_rfid_models "https://github.com/anjumsohail/rfid.syncservice/tree/main/RFID_SyncService/RFIDSync/Models"
click node_attendance_worker "https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/INOutSync/Services/AttendanceSyncWorker.vb"
click node_attendance_service "https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/INOutSync/Services/AttendanceSyncService.vb"
click node_attendance_repositories "https://github.com/anjumsohail/rfid.syncservice/tree/main/RFID_SyncService/INOutSync/Repositories"
click node_attendance_models "https://github.com/anjumsohail/rfid.syncservice/tree/main/RFID_SyncService/INOutSync/Models"
click node_database_factories "https://github.com/anjumsohail/rfid.syncservice/tree/main/RFID_SyncService/Shared/Database"
click node_device_client "https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/Shared/Devices/ZKteco/ZktecoDeviceClient.vb"
click node_device_models "https://github.com/anjumsohail/rfid.syncservice/tree/main/RFID_SyncService/Shared/Models"
click node_configuration "https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/Shared/Configuration/AppSettings.vb"
click node_logging "https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/Shared/Configuration/FileLogger.vb"
click node_notifications "https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/Shared/Configuration/SyncNotifier.vb"

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_service_host toneBlue
class node_rfid_worker,node_rfid_orchestrator,node_master_import,node_rfid_device_sync,node_rfid_repositories,node_rfid_models,node_oracle,node_access toneAmber
class node_attendance_worker,node_attendance_service,node_attendance_repositories,node_attendance_models toneMint
class node_database_factories,node_device_client,node_device_models,node_configuration,node_logging,node_notifications toneRose
class node_zkteco,node_email toneIndigo
```

## Components

### Service Hosting

- [Service Host](https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/ServiceHost.vb): `RFID_SyncService/ServiceHost.vb`

### RFID Synchronization

- [RFID Worker](https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/RFIDSync/Services/SyncWorker.vb): `RFID_SyncService/RFIDSync/Services/SyncWorker.vb`
- [Sync Orchestrator](https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/RFIDSync/Services/SyncOrchestrator.vb): `RFID_SyncService/RFIDSync/Services/SyncOrchestrator.vb`
- [Master Enrollment Import](https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/RFIDSync/Services/MasterEnrollmentImportService.vb): `RFID_SyncService/RFIDSync/Services/MasterEnrollmentImportService.vb`
- [Device User Sync](https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/RFIDSync/Services/DeviceSyncService.vb): `RFID_SyncService/RFIDSync/Services/DeviceSyncService.vb`
- [RFID Repositories](https://github.com/anjumsohail/rfid.syncservice/tree/main/RFID_SyncService/RFIDSync/Repositories): `RFID_SyncService/RFIDSync/Repositories`
- [RFID Sync Models](https://github.com/anjumsohail/rfid.syncservice/tree/main/RFID_SyncService/RFIDSync/Models): `RFID_SyncService/RFIDSync/Models`

### Attendance Synchronization

- [Attendance Worker](https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/INOutSync/Services/AttendanceSyncWorker.vb): `RFID_SyncService/INOutSync/Services/AttendanceSyncWorker.vb`
- [Attendance Sync](https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/INOutSync/Services/AttendanceSyncService.vb): `RFID_SyncService/INOutSync/Services/AttendanceSyncService.vb`
- [Attendance Repositories](https://github.com/anjumsohail/rfid.syncservice/tree/main/RFID_SyncService/INOutSync/Repositories): `RFID_SyncService/INOutSync/Repositories`
- [Attendance Models](https://github.com/anjumsohail/rfid.syncservice/tree/main/RFID_SyncService/INOutSync/Models): `RFID_SyncService/INOutSync/Models`

### Shared Infrastructure

- [Database Factories](https://github.com/anjumsohail/rfid.syncservice/tree/main/RFID_SyncService/Shared/Database): `RFID_SyncService/Shared/Database`
- [ZKTeco Client](https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/Shared/Devices/ZKteco/ZktecoDeviceClient.vb): `RFID_SyncService/Shared/Devices/ZKteco/ZktecoDeviceClient.vb`
- [Shared Device Models](https://github.com/anjumsohail/rfid.syncservice/tree/main/RFID_SyncService/Shared/Models): `RFID_SyncService/Shared/Models`
- [Configuration](https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/Shared/Configuration/AppSettings.vb): `RFID_SyncService/Shared/Configuration/AppSettings.vb`
- [File Logger](https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/Shared/Configuration/FileLogger.vb): `RFID_SyncService/Shared/Configuration/FileLogger.vb`
- [Sync Notifications](https://github.com/anjumsohail/rfid.syncservice/blob/main/RFID_SyncService/Shared/Configuration/SyncNotifier.vb): `RFID_SyncService/Shared/Configuration/SyncNotifier.vb`

### Other components

- **Oracle Database**
- **Microsoft Access**
- **ZKTeco Devices**
- **Email Service**

## Connections

- Service Host → RFID Worker: starts
- Service Host → Attendance Worker: starts
- RFID Worker → Sync Orchestrator: runs cycle
- Sync Orchestrator → Master Enrollment Import: imports enrollment
- Sync Orchestrator → Device User Sync: synchronizes users
- Sync Orchestrator → RFID Repositories: loads data
- Sync Orchestrator → RFID Sync Models: processes results
- Device User Sync → ZKTeco Client: updates devices
- Sync Orchestrator → ZKTeco Client: selects devices
- Attendance Worker → Attendance Sync: runs cycle
- Attendance Sync → Attendance Repositories: processes attendance
- Attendance Sync → Attendance Models: handles records
- Attendance Sync → ZKTeco Client: reads logs
- RFID Repositories → Database Factories: creates connections
- Attendance Repositories → Database Factories: creates connections
- Database Factories → Oracle Database: connects
- Database Factories → Microsoft Access: connects
- ZKTeco Client → ZKTeco Devices: communicates
- Sync Orchestrator → Configuration: reads settings
- Attendance Sync → Configuration: reads settings
- Sync Orchestrator → File Logger: logs cycle
- Attendance Sync → File Logger: logs cycle
- Sync Orchestrator → Sync Notifications: notifies
- Sync Notifications → Email Service: sends email
