Day 23 of building InvoiceFlow in public 🔐 Unpaid invoices now turn Overdue on their own: a background job inside the API checks every hour, and only once the due date has ended everywhere on Earth, so nobody is marked late early. Security note: this job is the only code that skips the per-user data filter, because there's no signed-in user in the background. It opts out explicitly and can make exactly one change, in a single UPDATE. When I removed the opt-out, the tests went red, which proves the filter still blocks everything by default, even in background code. 🔒 https://t.co/GBwLTlrIPg #BuildInPublic #ASPNETCore #DotNet #Cybersecurity
Day 22 of building InvoiceFlow in public 🔐 Clients can now be added, edited and deleted in the app, and draft invoices can be deleted after a confirm step. Security note: only drafts can be deleted. A sent invoice is a record of what your client received, so the API refuses with a 409, and sent invoices will be voided instead. I didn't write new auth or ownership tests for the delete endpoint. The route walking tests from previous days picked it up on their own and proved another user gets a 404. 🔒 https://t.co/GBwLTlrIPg #BuildInPublic #React #DotNet #Cybersecurity
Day 22 of building InvoiceFlow in public 🔐 Clients can now be added, edited and deleted in the app, and draft invoices can be deleted after a confirm step. Security note: only drafts can be deleted. A sent invoice is a record of what your client received, so the API refuses with a 409, and sent invoices will be voided instead. I didn't write new auth or ownership tests for the delete endpoint. The route walking tests from previous days picked it up on their own and proved another user gets a 404. 🔒 https://t.co/GBwLTlrIPg #BuildInPublic #React #DotNet #Cybersecurity
I dislike most of y’all UK folks
You lots piss me off a lot, only thing that makes sense about that place is the currency
God forbid I ever have to move there