Skip to content

Commit 6a55835

Browse files
authored
feat: continuous deviation checker (#114)
1 parent eaea726 commit 6a55835

File tree

16 files changed

+230
-150
lines changed

16 files changed

+230
-150
lines changed

.github/workflows/lint.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
name: Lint
22

3+
permissions:
4+
contents: read
5+
36
on:
47
push:
58
branches: [main]

.github/workflows/migrate.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
name: Deploy
2+
3+
permissions:
4+
contents: read
5+
26
on:
37
push:
48
paths:

.github/workflows/runScheduledJobs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
name: Run scheduled jobs
2+
permissions: {}
23
on:
34
schedule:
45
- cron: '*/10 12 * * *' # every 10 minutes at 12:00 PM UTC
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
name: Salary Deviation Checker
2+
permissions: {}
3+
on:
4+
schedule:
5+
- cron: '0 14 * * *'
6+
workflow_dispatch:
7+
8+
jobs:
9+
salaryDeviationChecker:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: Call salaryDeviationChecker endpoint
13+
id: salaryDeviationChecker
14+
uses: fjogeleit/http-request-action@v1
15+
with:
16+
url: '${{ vars.BASE_URL }}/salaryDeviationChecker'
17+
method: 'POST'
18+
customHeaders: '{"Authorization": "Bearer ${{ secrets.SYNC_ENDPOINT_KEY }}"}'
19+
timeout: 30000
20+
- name: Show Response
21+
run: |
22+
echo ${{ steps.salaryDeviationChecker.outputs.status }}
23+
echo ${{ steps.salaryDeviationChecker.outputs.response }}

.github/workflows/scheduleCheckIns.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
name: Schedule check-ins
2+
permissions: {}
23
on:
34
schedule:
4-
- cron: '0 12 * * *'
5+
- cron: '0 13 * * *'
56
workflow_dispatch:
67

78
jobs:

.github/workflows/syncDeelEmployees.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
name: Sync Deel Employees
2+
permissions: {}
23
on:
34
schedule:
45
- cron: '0 12 * * *'

.github/workflows/test.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
name: Test
22

3+
permissions:
4+
contents: read
5+
36
on:
47
push:
58
branches: [main]
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-- CreateEnum
2+
CREATE TYPE "SalaryDeviationStatus" AS ENUM ('IN_SYNC', 'DEVIATED');
3+
4+
-- AlterTable
5+
ALTER TABLE "Employee" ADD COLUMN "salaryDeviationCheckedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
6+
ADD COLUMN "salaryDeviationStatus" "SalaryDeviationStatus";

prisma/schema.prisma

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,26 @@ datasource db {
1414
}
1515

1616
model Employee {
17-
id String @id @default(cuid())
17+
id String @id @default(cuid())
1818
priority Priority
1919
reviewed Boolean
20-
email String @unique
20+
email String @unique
2121
salaries Salary[]
2222
deelEmployee DeelEmployee?
23-
keeperTestFeedback KeeperTestFeedback[] @relation("employee")
23+
keeperTestFeedback KeeperTestFeedback[] @relation("employee")
2424
checkIn30DaysScheduled Boolean
2525
checkIn60DaysScheduled Boolean
2626
checkIn80DaysScheduled Boolean
27-
proposedHires ProposedHire[] @relation("manager")
27+
proposedHires ProposedHire[] @relation("manager")
2828
proposedHiresAsTalentPartner ProposedHire[]
29-
keeperTestFeedbackSubmitted KeeperTestFeedback[] @relation("manager")
29+
keeperTestFeedbackSubmitted KeeperTestFeedback[] @relation("manager")
30+
salaryDeviationStatus SalaryDeviationStatus?
31+
salaryDeviationCheckedAt DateTime @default(now())
32+
}
33+
34+
enum SalaryDeviationStatus {
35+
IN_SYNC
36+
DEVIATED
3037
}
3138

3239
model DeelEmployee {

src/routeTree.gen.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import { Route as rootRouteImport } from './routes/__root'
1212
import { Route as SyncDeelEmployeesRouteImport } from './routes/syncDeelEmployees'
1313
import { Route as ScheduleCheckInsRouteImport } from './routes/scheduleCheckIns'
14+
import { Route as SalaryDeviationCheckerRouteImport } from './routes/salaryDeviationChecker'
1415
import { Route as RunScheduledJobsRouteImport } from './routes/runScheduledJobs'
1516
import { Route as ReceiveKeeperTestResultsRouteImport } from './routes/receiveKeeperTestResults'
1617
import { Route as ProposedHiresRouteImport } from './routes/proposed-hires'
@@ -34,6 +35,11 @@ const ScheduleCheckInsRoute = ScheduleCheckInsRouteImport.update({
3435
path: '/scheduleCheckIns',
3536
getParentRoute: () => rootRouteImport,
3637
} as any)
38+
const SalaryDeviationCheckerRoute = SalaryDeviationCheckerRouteImport.update({
39+
id: '/salaryDeviationChecker',
40+
path: '/salaryDeviationChecker',
41+
getParentRoute: () => rootRouteImport,
42+
} as any)
3743
const RunScheduledJobsRoute = RunScheduledJobsRouteImport.update({
3844
id: '/runScheduledJobs',
3945
path: '/runScheduledJobs',
@@ -107,6 +113,7 @@ export interface FileRoutesByFullPath {
107113
'/proposed-hires': typeof ProposedHiresRoute
108114
'/receiveKeeperTestResults': typeof ReceiveKeeperTestResultsRoute
109115
'/runScheduledJobs': typeof RunScheduledJobsRoute
116+
'/salaryDeviationChecker': typeof SalaryDeviationCheckerRoute
110117
'/scheduleCheckIns': typeof ScheduleCheckInsRoute
111118
'/syncDeelEmployees': typeof SyncDeelEmployeesRoute
112119
'/employee/$employeeId': typeof EmployeeEmployeeIdRoute
@@ -123,6 +130,7 @@ export interface FileRoutesByTo {
123130
'/proposed-hires': typeof ProposedHiresRoute
124131
'/receiveKeeperTestResults': typeof ReceiveKeeperTestResultsRoute
125132
'/runScheduledJobs': typeof RunScheduledJobsRoute
133+
'/salaryDeviationChecker': typeof SalaryDeviationCheckerRoute
126134
'/scheduleCheckIns': typeof ScheduleCheckInsRoute
127135
'/syncDeelEmployees': typeof SyncDeelEmployeesRoute
128136
'/employee/$employeeId': typeof EmployeeEmployeeIdRoute
@@ -140,6 +148,7 @@ export interface FileRoutesById {
140148
'/proposed-hires': typeof ProposedHiresRoute
141149
'/receiveKeeperTestResults': typeof ReceiveKeeperTestResultsRoute
142150
'/runScheduledJobs': typeof RunScheduledJobsRoute
151+
'/salaryDeviationChecker': typeof SalaryDeviationCheckerRoute
143152
'/scheduleCheckIns': typeof ScheduleCheckInsRoute
144153
'/syncDeelEmployees': typeof SyncDeelEmployeesRoute
145154
'/employee/$employeeId': typeof EmployeeEmployeeIdRoute
@@ -158,6 +167,7 @@ export interface FileRouteTypes {
158167
| '/proposed-hires'
159168
| '/receiveKeeperTestResults'
160169
| '/runScheduledJobs'
170+
| '/salaryDeviationChecker'
161171
| '/scheduleCheckIns'
162172
| '/syncDeelEmployees'
163173
| '/employee/$employeeId'
@@ -174,6 +184,7 @@ export interface FileRouteTypes {
174184
| '/proposed-hires'
175185
| '/receiveKeeperTestResults'
176186
| '/runScheduledJobs'
187+
| '/salaryDeviationChecker'
177188
| '/scheduleCheckIns'
178189
| '/syncDeelEmployees'
179190
| '/employee/$employeeId'
@@ -190,6 +201,7 @@ export interface FileRouteTypes {
190201
| '/proposed-hires'
191202
| '/receiveKeeperTestResults'
192203
| '/runScheduledJobs'
204+
| '/salaryDeviationChecker'
193205
| '/scheduleCheckIns'
194206
| '/syncDeelEmployees'
195207
| '/employee/$employeeId'
@@ -207,6 +219,7 @@ export interface RootRouteChildren {
207219
ProposedHiresRoute: typeof ProposedHiresRoute
208220
ReceiveKeeperTestResultsRoute: typeof ReceiveKeeperTestResultsRoute
209221
RunScheduledJobsRoute: typeof RunScheduledJobsRoute
222+
SalaryDeviationCheckerRoute: typeof SalaryDeviationCheckerRoute
210223
ScheduleCheckInsRoute: typeof ScheduleCheckInsRoute
211224
SyncDeelEmployeesRoute: typeof SyncDeelEmployeesRoute
212225
EmployeeEmployeeIdRoute: typeof EmployeeEmployeeIdRoute
@@ -229,6 +242,13 @@ declare module '@tanstack/react-router' {
229242
preLoaderRoute: typeof ScheduleCheckInsRouteImport
230243
parentRoute: typeof rootRouteImport
231244
}
245+
'/salaryDeviationChecker': {
246+
id: '/salaryDeviationChecker'
247+
path: '/salaryDeviationChecker'
248+
fullPath: '/salaryDeviationChecker'
249+
preLoaderRoute: typeof SalaryDeviationCheckerRouteImport
250+
parentRoute: typeof rootRouteImport
251+
}
232252
'/runScheduledJobs': {
233253
id: '/runScheduledJobs'
234254
path: '/runScheduledJobs'
@@ -327,6 +347,7 @@ const rootRouteChildren: RootRouteChildren = {
327347
ProposedHiresRoute: ProposedHiresRoute,
328348
ReceiveKeeperTestResultsRoute: ReceiveKeeperTestResultsRoute,
329349
RunScheduledJobsRoute: RunScheduledJobsRoute,
350+
SalaryDeviationCheckerRoute: SalaryDeviationCheckerRoute,
330351
ScheduleCheckInsRoute: ScheduleCheckInsRoute,
331352
SyncDeelEmployeesRoute: SyncDeelEmployeesRoute,
332353
EmployeeEmployeeIdRoute: EmployeeEmployeeIdRoute,

0 commit comments

Comments
 (0)