@@ -8,6 +8,8 @@ defmodule Algora.Interviews do
88 alias Algora.Interviews.JobInterview
99 alias Algora.Repo
1010
11+ require Logger
12+
1113 @ doc """
1214 Returns the list of job interviews.
1315
@@ -70,9 +72,26 @@ defmodule Algora.Interviews do
7072
7173 """
7274 def create_job_interview ( attrs \\ % { } ) do
73- % JobInterview { }
74- |> JobInterview . changeset ( attrs )
75- |> Repo . insert ( )
75+ case % JobInterview { }
76+ |> JobInterview . changeset ( attrs )
77+ |> Repo . insert ( ) do
78+ { :ok , interview } ->
79+ # Schedule reminder emails if the interview has a scheduled time
80+ # if Map.get(attrs, :scheduled_at) || Map.get(attrs, "scheduled_at") do
81+ # case AlgoraCloud.Talent.Jobs.SendInterviewReminderEmail.schedule_reminders(interview.id) do
82+ # {:ok, results} ->
83+ # Logger.info("Scheduled interview reminders for interview #{interview.id}: #{inspect(results)}")
84+
85+ # {:error, reason} ->
86+ # Logger.warning("Failed to schedule interview reminders for interview #{interview.id}: #{inspect(reason)}")
87+ # end
88+ # end
89+
90+ { :ok , interview }
91+
92+ { :error , changeset } ->
93+ { :error , changeset }
94+ end
7695 end
7796
7897 @ doc """
@@ -156,6 +175,38 @@ defmodule Algora.Interviews do
156175 attrs
157176 end
158177
159- create_job_interview ( attrs )
178+ case create_job_interview ( attrs ) do
179+ { :ok , interview } ->
180+ # Additional scheduling logic is handled in create_job_interview
181+ { :ok , interview }
182+
183+ { :error , changeset } ->
184+ { :error , changeset }
185+ end
186+ end
187+
188+ @ doc """
189+ Upserts a job interview for a user and job posting.
190+ If an interview already exists, returns the existing one.
191+ If not, creates a new one with initial status.
192+
193+ ## Examples
194+
195+ iex> upsert_job_interview(user_id, job_posting_id)
196+ {:ok, %JobInterview{}}
197+
198+ """
199+ def upsert_job_interview ( user_id , job_posting_id ) do
200+ case Repo . get_by ( JobInterview , user_id: user_id , job_posting_id: job_posting_id ) do
201+ nil ->
202+ create_job_interview ( % {
203+ user_id: user_id ,
204+ job_posting_id: job_posting_id ,
205+ status: :initial
206+ } )
207+
208+ existing_interview ->
209+ { :ok , existing_interview }
210+ end
160211 end
161212end
0 commit comments