Skip to content

Commit 39fda6c

Browse files
fix: address Devin Review bugs - razao_social in invite, complete_registration guard, VITE_API_URL trailing slash
- Bug 1: Add razao_social field to CompanyInviteCreate model, invite form, and create_company_initial so razao_social is set when creating pending companies - Bug 2: Add company.status == completed check in complete_registration to prevent overwriting already-completed registrations - Fix pre-existing VITE_API_URL trailing slash causing double-slash API URLs Co-Authored-By: daniel.resgate <daniel.rider69@gmail.com>
1 parent 68264bd commit 39fda6c

File tree

6 files changed

+31
-3
lines changed

6 files changed

+31
-3
lines changed

backend/app/api/routes/invites.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ def send_invite(
5757
if existing_company:
5858
company = existing_company
5959
company.email = invite_in.email
60+
company.razao_social = invite_in.razao_social
6061
session.add(company)
6162
session.commit()
6263
session.refresh(company)
@@ -65,6 +66,7 @@ def send_invite(
6566
session=session,
6667
cnpj=invite_in.cnpj,
6768
email=invite_in.email,
69+
razao_social=invite_in.razao_social,
6870
)
6971

7072
token, expires_at = generate_invite_token(
@@ -265,6 +267,12 @@ def complete_registration(
265267
detail="Empresa não encontrada.",
266268
)
267269

270+
if company.status == CompanyStatus.completed:
271+
raise HTTPException(
272+
status_code=400,
273+
detail="O cadastro desta empresa já foi completado.",
274+
)
275+
268276
updated_company = complete_company_registration(
269277
session=session,
270278
company=company,

backend/app/crud.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,11 +93,12 @@ def create_company(*, session: Session, company_in: CompanyCreate) -> Company:
9393

9494

9595
def create_company_initial(
96-
*, session: Session, cnpj: str, email: str
96+
*, session: Session, cnpj: str, email: str, razao_social: str
9797
) -> Company:
9898
db_company = Company(
9999
cnpj=cnpj,
100100
email=email,
101+
razao_social=razao_social,
101102
status=CompanyStatus.pending,
102103
)
103104
session.add(db_company)

backend/app/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ class CompanyInviteBase(SQLModel):
225225
class CompanyInviteCreate(SQLModel):
226226
cnpj: str = Field(min_length=1, max_length=20)
227227
email: EmailStr = Field(max_length=255)
228+
razao_social: str = Field(min_length=1, max_length=255)
228229

229230

230231
class CompanyInvite(CompanyInviteBase, table=True):

frontend/src/client/types.gen.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ export type CompanyPublic = {
9494
export type CompanyInviteCreate = {
9595
cnpj: string;
9696
email: string;
97+
razao_social: string;
9798
};
9899

99100
export type CompanyInvitePublic = {

frontend/src/main.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { Toaster } from "./components/ui/sonner"
1313
import "./index.css"
1414
import { routeTree } from "./routeTree.gen"
1515

16-
OpenAPI.BASE = import.meta.env.VITE_API_URL
16+
OpenAPI.BASE = (import.meta.env.VITE_API_URL || "").replace(/\/+$/, "")
1717
OpenAPI.TOKEN = async () => {
1818
return localStorage.getItem("access_token") || ""
1919
}

frontend/src/routes/_layout/companies.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ const resumeToFormMapping: ResumeFieldMapping[] = [
368368
const inviteFormSchema = z.object({
369369
cnpj: z.string().min(1, { message: "CNPJ é obrigatório" }),
370370
email: z.string().email({ message: "E-mail inválido" }),
371+
razao_social: z.string().min(1, { message: "Razão Social é obrigatória" }),
371372
})
372373

373374
type InviteFormData = z.infer<typeof inviteFormSchema>
@@ -438,7 +439,7 @@ function Companies() {
438439
resolver: zodResolver(inviteFormSchema),
439440
mode: "onBlur",
440441
criteriaMode: "all",
441-
defaultValues: { cnpj: "", email: "" },
442+
defaultValues: { cnpj: "", email: "", razao_social: "" },
442443
})
443444

444445
const inviteMutation = useMutation({
@@ -496,6 +497,22 @@ function Companies() {
496497
</FormItem>
497498
)}
498499
/>
500+
<FormField
501+
control={inviteForm.control}
502+
name="razao_social"
503+
render={({ field }) => (
504+
<FormItem>
505+
<FormLabel>Razão Social</FormLabel>
506+
<FormControl>
507+
<Input
508+
placeholder="Razão Social da empresa"
509+
{...field}
510+
/>
511+
</FormControl>
512+
<FormMessage />
513+
</FormItem>
514+
)}
515+
/>
499516
<FormField
500517
control={inviteForm.control}
501518
name="email"

0 commit comments

Comments
 (0)