Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
d083477
chore(GitActions): Add Linter
bllr777 Mar 17, 2026
fefbb0b
chore(GitActions): Modify Git Workflow
bllr777 Mar 17, 2026
a543d15
Merge pull request #62 from bllr777/feature/GitActions
bllr777 Mar 17, 2026
220c9ee
feat(ClientHub): Initial Client Hub Implementation
bllr777 Mar 18, 2026
b905492
Merge pull request #63 from bllr777/feature/ClientHub
bllr777 Mar 18, 2026
f6f149f
chore(refinement): Tighten up api code
bllr777 Mar 18, 2026
ca122af
Merge pull request #64 from bllr777/feature/ApiRefinement
bllr777 Mar 18, 2026
153d023
feat(reCAPTCHA): Replace reCAPTCHA with Turnstile
bllr777 Mar 18, 2026
ec6dbc5
Merge pull request #65 from bllr777/feature/Middleware
bllr777 Mar 19, 2026
40d47bb
feat(estimate): Add Estimate Revisions
bllr777 Mar 19, 2026
b62c781
Merge pull request #66 from bllr777/feature/reCATPCHA
bllr777 Mar 19, 2026
5806c8a
chore(cleanup): Code Clean Up
bllr777 Mar 19, 2026
ec2a79a
Merge pull request #67 from bllr777/feautre/CleanUp
bllr777 Mar 19, 2026
2324795
feat(messaging): Tighten Chat Feature
bllr777 Mar 19, 2026
ad33042
Merge pull request #68 from bllr777/feature/Chat
bllr777 Mar 20, 2026
411bb92
feat(dispatch): Initial Dispatch Implementation
bllr777 Mar 20, 2026
1ec93a5
Merge pull request #69 from bllr777/feature/Dispatch
bllr777 Mar 20, 2026
6a55788
Add workflow and schedule settings
bllr777 Mar 21, 2026
6da2fb7
feat(onboading): Add Workflows
bllr777 Mar 21, 2026
9d073fc
Merge pull request #70 from bllr777/feature/OnBoardingMitigation
bllr777 Mar 21, 2026
7c8a6d0
feat(clienthub): Add updates for clients
bllr777 Mar 21, 2026
f6c3beb
Merge pull request #71 from bllr777/feature/communication
bllr777 Mar 21, 2026
f4b9995
chore: update api
bllr777 Mar 21, 2026
9bac0be
Merge pull request #72 from bllr777/feature/stripe
bllr777 Mar 21, 2026
6ccf261
feat(redesign): Redesign UI screens and Endpoints
bllr777 Mar 23, 2026
cd71819
chore(touchup): UI touch up
bllr777 Mar 23, 2026
0d7df34
feat(support): Initial Implementation for the Support Hub
bllr777 Mar 24, 2026
050b2dd
Merge pull request #73 from bllr777/feature/AppSupport
bllr777 Mar 24, 2026
2a12444
feat(language): Implement Language Translation
bllr777 Mar 24, 2026
4f9111f
Merge pull request #74 from bllr777/feature/LanguageSelection
bllr77713 Mar 26, 2026
0703244
feat(followup): Initial Follow Up Implementation
bllr777 Mar 26, 2026
9a8d7db
feat(followup): Add FollowUp and Square
bllr777 Mar 27, 2026
d6b737d
fix(api): correct unit of work error logging
bllr777 Mar 27, 2026
5b62f75
Merge pull request #75 from bllr777/feature/FollowUps
bllr777 Mar 27, 2026
b872030
feat(import): Data Import and Export
bllr777 Mar 27, 2026
95ddaf3
Merge pull request #76 from bllr777/feature/DataImpExp
bllr777 Mar 27, 2026
2064bd3
feat(estimates): Revise Estimate Workflow
bllr777 Mar 27, 2026
3f07e28
Merge pull request #77 from bllr777/feature/ReviseEstimates
bllr777 Mar 28, 2026
11e6fb6
fix(square): Fix Square flow. Both UI and API
bllr777 Mar 28, 2026
edf1c91
Merge pull request #78 from bllr777/feature/BugFixes
bllr777 Mar 28, 2026
faec758
feat(automation): Initial Automation Tests
bllr777 Mar 28, 2026
82df328
Merge pull request #79 from bllr777/feature/AutomationTests
bllr777 Mar 28, 2026
6b493db
feat(staging): Environment Setup
bllr777 Mar 28, 2026
608e78f
feat(staging): Remove Playwright step from Actions
bllr777 Mar 29, 2026
97d44f4
Merge pull request #80 from bllr777/feature/EnvironmentStaging
bllr777 Mar 29, 2026
2f58c8b
Merge branch 'master' into dev
bllr777 Mar 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
82 changes: 82 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: CI

on:
pull_request:
push:
branches:
- master
- dev
- feature/**

jobs:
dotnet-format:
name: dotnet format
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'

- name: Restore
run: dotnet restore ./JobFlow.API/JobFlow.API.csproj

- name: Verify formatting
run: dotnet format ./JobFlow.API/JobFlow.API.csproj --verify-no-changes --verbosity minimal

dependency-review:
name: Dependency review
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Dependency review
uses: actions/dependency-review-action@v4
continue-on-error: true

build:
name: Build
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'

- name: Restore
run: dotnet restore ./JobFlow.API/JobFlow.API.csproj

- name: Build
run: dotnet build ./JobFlow.API/JobFlow.API.csproj -c Release --no-restore

test:
name: Test
runs-on: ubuntu-latest
needs: build

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'

- name: Restore
run: dotnet restore ./JobFlow.API/JobFlow.API.csproj

- name: Test
run: dotnet test ./JobFlow.API/JobFlow.API.csproj -c Release --no-build

4 changes: 0 additions & 4 deletions .github/workflows/master_jobflow-api.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
name: Build and deploy ASP.Net Core app to Azure Web App - jobflow-api

on:
push:
tags:
- 'release-*'
workflow_dispatch:

jobs:
Expand All @@ -20,7 +17,6 @@ jobs:
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
include-prerelease: true

# ✅ Restore explicitly
- name: Restore dependencies
Expand Down
95 changes: 95 additions & 0 deletions .github/workflows/staging_jobflow-api.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
name: Build and deploy ASP.Net Core app to Azure Web App - jobflow-api-staging

on:
push:
branches:
- master
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read

steps:
- uses: actions/checkout@v4

- name: Set up .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'

- name: Build with dotnet
run: dotnet build JobFlow.API/JobFlow.API.csproj --configuration Release

- name: dotnet publish
run: dotnet publish JobFlow.API/JobFlow.API.csproj --configuration Release --output ${{env.DOTNET_ROOT}}/myapp

- name: Upload artifact for deployment job
uses: actions/upload-artifact@v4
with:
name: .net-app
path: ${{env.DOTNET_ROOT}}/myapp

deploy:
runs-on: ubuntu-latest
needs: build
environment:
name: 'Staging'
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
permissions:
id-token: write
contents: read

steps:
- name: Download artifact from build job
uses: actions/download-artifact@v4
with:
name: .net-app

- name: Login to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_15A959992577476DBE8A0461C48B98E2 }}
tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_0D7B12FDA6784264AD6F6B11A9FD4D54 }}
subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_9763D46E278F4180A2B5D8CC4B8B9E88 }}

- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v3
with:
app-name: 'jobflow-api-staging'
slot-name: 'Production'
package: .

deploy-prod:
runs-on: ubuntu-latest
needs: deploy
environment:
name: 'Production'
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
permissions:
id-token: write
contents: read

steps:
- name: Download artifact from build job
uses: actions/download-artifact@v4
with:
name: .net-app

- name: Login to Azure
uses: azure/login@v2
with:
client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_15A959992577476DBE8A0461C48B98E2 }}
tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_0D7B12FDA6784264AD6F6B11A9FD4D54 }}
subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_9763D46E278F4180A2B5D8CC4B8B9E88 }}

- name: Deploy to Azure Web App (prod)
id: deploy-to-webapp
uses: azure/webapps-deploy@v3
with:
app-name: 'jobflow-api'
slot-name: 'Production'
package: .
26 changes: 26 additions & 0 deletions JobFlow.API/Controllers/AssignmentController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -96,5 +96,31 @@ public async Task<IActionResult> UpdateStatus(Guid id, [FromBody] UpdateAssignme
return Ok(result.Value);
}

// Update assignees for an assignment
[HttpPut("{id:guid}/assignees")]
public async Task<IActionResult> UpdateAssignees(Guid id, [FromBody] UpdateAssignmentAssigneesRequestDto dto)
{
var organizationId = HttpContext.GetOrganizationId();

var result = await _assignmentService.UpdateAssignmentAssigneesAsync(organizationId, id, dto);
if (result.IsFailure)
return BadRequest(result.Error);

return Ok(result.Value);
}

// Update assignment notes
[HttpPut("{id:guid}/notes")]
public async Task<IActionResult> UpdateNotes(Guid id, [FromBody] UpdateAssignmentNotesRequestDto dto)
{
var organizationId = HttpContext.GetOrganizationId();

var result = await _assignmentService.UpdateAssignmentNotesAsync(organizationId, id, dto);
if (result.IsFailure)
return BadRequest(result.Error);

return Ok(result.Value);
}


}
10 changes: 7 additions & 3 deletions JobFlow.API/Controllers/AuthController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
using System.Text;
using FirebaseAdmin.Auth;
using JobFlow.Business.ModelErrors;
using JobFlow.Business.Models.DTOs;
using JobFlow.Business.Services.ServiceInterfaces;
using JobFlow.Domain.Models;
using Mapster;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
Expand All @@ -29,6 +31,7 @@ public AuthController(
// ============================================================
[HttpPost]
[Route("login-with-firebase")]
[AllowAnonymous]
public async Task<IActionResult> LoginWithFirebase([FromBody] TokenDto model)
{
try
Expand Down Expand Up @@ -57,7 +60,8 @@ public async Task<IActionResult> LoginWithFirebase([FromBody] TokenDto model)
else
user = userInfo.Value;

return Ok(new { user.Organization });
var organizationDto = user.Organization?.Adapt<OrganizationDto>();
return Ok(new { organization = organizationDto });
}
catch (Exception ex)
{
Expand Down Expand Up @@ -210,15 +214,15 @@ public async Task<IActionResult> DeleteAccount(string uid)
return BadRequest(new { Message = "Failed to delete user.", Error = ex.Message });
}
}

}

// ============================================================
// DTOs
// ============================================================
public class TokenDto
{
public string Token { get; set; }
public string Token { get; set; } = string.Empty;
}

public class CreateAccountRequest
Expand Down
Loading
Loading