Repository navigation
Expand file tree
/
Copy pathTalentServices.cs
More file actions
102 lines (93 loc) · 4.18 KB
/
Copy pathTalentServices.cs
File metadata and controls
102 lines (93 loc) · 4.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
using ServiceStack;
using ServiceStack.OrmLite;
using System;
using TalentBlazor.ServiceModel;
namespace TalentBlazor.ServiceInterface;
public class TalentServices : Service
{
JobApplicationEvent CreateEvent(JobApplicationStatus status)
{
var userId = this.GetSession().UserAuthId;
return new JobApplicationEvent
{
ApplicationUserId = userId,
Status = status,
Description = status.ToDescription(),
EventDate = DateTime.UtcNow,
}.WithAudit(userId);
}
public object Post(CreatePhoneScreen request)
{
var jobApp = Db.SingleById<JobApplication>(request.JobApplicationId);
jobApp.PhoneScreen = request.ConvertTo<PhoneScreen>().WithAudit(Request);
jobApp.Events ??= new();
if(jobApp.ApplicationStatus != request.ApplicationStatus)
jobApp.Events.Add(CreateEvent(request.ApplicationStatus));
jobApp.ApplicationStatus = request.ApplicationStatus;
Db.Save(jobApp, references:true);
return jobApp.PhoneScreen;
}
public object Patch(UpdatePhoneScreen request)
{
var jobApp = Db.LoadSingleById<JobApplication>(request.JobApplicationId);
var jobAppStatus = request.ApplicationStatus ?? JobApplicationStatus.PhoneScreeningCompleted;
jobApp.PhoneScreen.PopulateWithNonDefaultValues(request).WithAudit(Request);
if (jobApp.ApplicationStatus != request.ApplicationStatus)
jobApp.Events.Add(CreateEvent(jobAppStatus));
jobApp.ApplicationStatus = jobAppStatus;
Db.Save(jobApp, references:true);
return jobApp.PhoneScreen;
}
public object Post(CreateInterview request)
{
var jobApp = Db.SingleById<JobApplication>(request.JobApplicationId);
jobApp.Interview = request.ConvertTo<Interview>().WithAudit(Request);
jobApp.Events ??= new();
if (jobApp.ApplicationStatus != request.ApplicationStatus)
jobApp.Events.Add(CreateEvent(request.ApplicationStatus));
jobApp.ApplicationStatus = request.ApplicationStatus;
Db.Save(jobApp, references: true);
return jobApp.Interview;
}
public object Patch(UpdateInterview request)
{
var jobApp = Db.LoadSingleById<JobApplication>(request.JobApplicationId);
var jobAppStatus = request.ApplicationStatus ?? JobApplicationStatus.InterviewCompleted;
jobApp.Interview.PopulateWithNonDefaultValues(request).WithAudit(Request);
if (jobApp.ApplicationStatus != request.ApplicationStatus)
jobApp.Events.Add(CreateEvent(jobAppStatus));
jobApp.ApplicationStatus = jobAppStatus;
Db.Save(jobApp, references: true);
return jobApp.Interview;
}
public object Post(CreateJobOffer request)
{
var jobApp = Db.SingleById<JobApplication>(request.JobApplicationId);
jobApp.JobOffer = request.ConvertTo<JobOffer>().WithAudit(Request);
jobApp.JobOffer.ApplicationUserId = GetSession().UserAuthId;
jobApp.Events ??= new();
if (jobApp.ApplicationStatus != request.ApplicationStatus)
jobApp.Events.Add(CreateEvent(request.ApplicationStatus));
jobApp.ApplicationStatus = request.ApplicationStatus;
Db.Save(jobApp, references: true);
return jobApp.JobOffer;
}
public object Get(TalentStats request)
{
var jobsCount = Db.Count<Job>();
var contactCount = Db.Count<Contact>();
var avgExpectedSalary = Db.Scalar<Contact, int>(x => Sql.Avg(x.SalaryExpectation));
var avgJobSalaryRangeLower = Db.Scalar<Job, int>(x => Sql.Avg(x.SalaryRangeLower));
var avgJobSalaryRangeUpper = Db.Scalar<Job, int>(x => Sql.Avg(x.SalaryRangeUpper));
var preferredRemote = Db.Count<Contact>(x => x.PreferredLocation == "Remote");
return new TalentStatsResponse
{
TotalJobs = jobsCount,
TotalContacts = contactCount,
AvgSalaryExpectation = avgExpectedSalary,
AvgSalaryLower = avgJobSalaryRangeLower,
AvgSalaryUpper = avgJobSalaryRangeUpper,
PreferredRemotePercentage = Math.Round((decimal)((double)preferredRemote / (double)contactCount * 100),2)
};
}
}