fix: Improve delete operations with existence checks

- Update delete functions to return bool indicating success
- Add existence checks before deleting items
- Return 404 error for non-existent items in RPC delete operations
- Remove unused 'new_response_ok' result from RPC delete operations
This commit is contained in:
Mahmoud-Emad
2025-10-01 10:11:12 +03:00
parent aa29384611
commit be18d30de3
14 changed files with 210 additions and 56 deletions

View File

@@ -3,7 +3,7 @@ module heromodels
import freeflowuniverse.herolib.data.encoder
import freeflowuniverse.herolib.data.ourtime
import freeflowuniverse.herolib.hero.db
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_ok, new_response_true }
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_true }
import freeflowuniverse.herolib.hero.user { UserRef }
import freeflowuniverse.herolib.ui.console
import json
@@ -123,8 +123,13 @@ pub fn (mut self DBCalendar) set(o Calendar) !Calendar {
return self.db.set[Calendar](o)!
}
pub fn (mut self DBCalendar) delete(id u32) ! {
pub fn (mut self DBCalendar) delete(id u32) !bool {
// Check if the item exists before trying to delete
if !self.db.exists[Calendar](id)! {
return false
}
self.db.delete[Calendar](id)!
return true
}
pub fn (mut self DBCalendar) exist(id u32) !bool {
@@ -156,8 +161,15 @@ pub fn calendar_handle(mut f ModelsFactory, rpcid int, servercontext map[string]
}
'delete' {
id := db.decode_u32(params)!
f.calendar.delete(id)!
return new_response_ok(rpcid)
deleted := f.calendar.delete(id)!
if deleted {
return new_response_true(rpcid)
} else {
return new_error(rpcid,
code: 404
message: 'Calendar with ID ${id} not found'
)
}
}
'exist' {
id := db.decode_u32(params)!

View File

@@ -2,7 +2,7 @@ module heromodels
import freeflowuniverse.herolib.data.encoder
import freeflowuniverse.herolib.data.ourtime
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_ok, new_response_true }
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_true }
import freeflowuniverse.herolib.hero.user { UserRef }
import json
import freeflowuniverse.herolib.hero.db
@@ -388,8 +388,13 @@ pub fn (mut self DBCalendarEvent) set(o CalendarEvent) !CalendarEvent {
return self.db.set[CalendarEvent](o)!
}
pub fn (mut self DBCalendarEvent) delete(id u32) ! {
pub fn (mut self DBCalendarEvent) delete(id u32) !bool {
// Check if the item exists before trying to delete
if !self.db.exists[CalendarEvent](id)! {
return false
}
self.db.delete[CalendarEvent](id)!
return true
}
pub fn (mut self DBCalendarEvent) exist(id u32) !bool {
@@ -463,8 +468,15 @@ pub fn calendar_event_handle(mut f ModelsFactory, rpcid int, servercontext map[s
}
'delete' {
id := db.decode_u32(params)!
f.calendar_event.delete(id)!
return new_response_ok(rpcid)
deleted := f.calendar_event.delete(id)!
if deleted {
return new_response_true(rpcid)
} else {
return new_error(rpcid,
code: 404
message: 'Calendar event with ID ${id} not found'
)
}
}
'exist' {
id := db.decode_u32(params)!

View File

@@ -3,7 +3,7 @@ module heromodels
import freeflowuniverse.herolib.data.encoder
import freeflowuniverse.herolib.data.ourtime
import freeflowuniverse.herolib.hero.db
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_ok, new_response_true }
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_true }
import freeflowuniverse.herolib.hero.user { UserRef }
import json
@@ -143,8 +143,13 @@ pub fn (mut self DBChatGroup) set(o ChatGroup) !ChatGroup {
return self.db.set[ChatGroup](o)!
}
pub fn (mut self DBChatGroup) delete(id u32) ! {
pub fn (mut self DBChatGroup) delete(id u32) !bool {
// Check if the item exists before trying to delete
if !self.db.exists[ChatGroup](id)! {
return false
}
self.db.delete[ChatGroup](id)!
return true
}
pub fn (mut self DBChatGroup) exist(id u32) !bool {
@@ -176,8 +181,15 @@ pub fn chat_group_handle(mut f ModelsFactory, rpcid int, servercontext map[strin
}
'delete' {
id := db.decode_u32(params)!
f.chat_group.delete(id)!
return new_response_ok(rpcid)
deleted := f.chat_group.delete(id)!
if deleted {
return new_response_true(rpcid)
} else {
return new_error(rpcid,
code: 404
message: 'Chat group with ID ${id} not found'
)
}
}
'exist' {
id := db.decode_u32(params)!

View File

@@ -3,7 +3,7 @@ module heromodels
import freeflowuniverse.herolib.data.encoder
import freeflowuniverse.herolib.data.ourtime
import freeflowuniverse.herolib.hero.db
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_ok, new_response_true }
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_true }
import freeflowuniverse.herolib.hero.user { UserRef }
import json
@@ -243,8 +243,13 @@ pub fn (mut self DBChatMessage) set(o ChatMessage) !ChatMessage {
return self.db.set[ChatMessage](o)!
}
pub fn (mut self DBChatMessage) delete(id u32) ! {
pub fn (mut self DBChatMessage) delete(id u32) !bool {
// Check if the item exists before trying to delete
if !self.db.exists[ChatMessage](id)! {
return false
}
self.db.delete[ChatMessage](id)!
return true
}
pub fn (mut self DBChatMessage) exist(id u32) !bool {
@@ -299,8 +304,15 @@ pub fn chat_message_handle(mut f ModelsFactory, rpcid int, servercontext map[str
}
'delete' {
id := db.decode_u32(params)!
f.chat_message.delete(id)!
return new_response_ok(rpcid)
deleted := f.chat_message.delete(id)!
if deleted {
return new_response_true(rpcid)
} else {
return new_error(rpcid,
code: 404
message: 'Chat message with ID ${id} not found'
)
}
}
'exist' {
id := db.decode_u32(params)!

View File

@@ -3,7 +3,7 @@ module heromodels
import freeflowuniverse.herolib.data.encoder
import freeflowuniverse.herolib.data.ourtime
import freeflowuniverse.herolib.hero.db
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_ok, new_response_true }
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_true }
import freeflowuniverse.herolib.hero.user { UserRef }
import json
@@ -158,8 +158,13 @@ pub fn (mut self DBContact) set(o Contact) !Contact {
return self.db.set[Contact](o)!
}
pub fn (mut self DBContact) delete(id u32) ! {
pub fn (mut self DBContact) delete(id u32) !bool {
// Check if the item exists before trying to delete
if !self.db.exists[Contact](id)! {
return false
}
self.db.delete[Contact](id)!
return true
}
pub fn (mut self DBContact) exist(id u32) !bool {
@@ -209,8 +214,15 @@ pub fn contact_handle(mut f ModelsFactory, rpcid int, servercontext map[string]s
}
'delete' {
id := db.decode_u32(params)!
f.contact.delete(id)!
return new_response_ok(rpcid)
deleted := f.contact.delete(id)!
if deleted {
return new_response_true(rpcid)
} else {
return new_error(rpcid,
code: 404
message: 'Contact with ID ${id} not found'
)
}
}
'exist' {
id := db.decode_u32(params)!

View File

@@ -3,7 +3,7 @@ module heromodels
import freeflowuniverse.herolib.data.encoder
import freeflowuniverse.herolib.data.ourtime
import freeflowuniverse.herolib.hero.db
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_ok, new_response_true }
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_true }
import freeflowuniverse.herolib.hero.user { UserRef }
import json
@@ -174,7 +174,12 @@ pub fn (mut self DBGroup) set(o_ Group) !Group {
return o
}
pub fn (mut self DBGroup) delete(id u32) ! {
pub fn (mut self DBGroup) delete(id u32) !bool {
// Check if the item exists before trying to delete
if !self.db.exists[Group](id)! {
return false
}
mut group := self.get(id)!
// If this group has a parent, remove it from the parent's subgroups
@@ -190,6 +195,7 @@ pub fn (mut self DBGroup) delete(id u32) ! {
}
self.db.delete[Group](id)!
return true
}
pub fn (mut self DBGroup) exist(id u32) !bool {
@@ -264,8 +270,15 @@ pub fn group_handle(mut f ModelsFactory, rpcid int, servercontext map[string]str
}
'delete' {
id := db.decode_u32(params)!
f.group.delete(id)!
return new_response_ok(rpcid)
deleted := f.group.delete(id)!
if deleted {
return new_response_true(rpcid)
} else {
return new_error(rpcid,
code: 404
message: 'Group with ID ${id} not found'
)
}
}
'exist' {
id := db.decode_u32(params)!

View File

@@ -3,7 +3,7 @@ module heromodels
import freeflowuniverse.herolib.data.encoder
import freeflowuniverse.herolib.data.ourtime
import freeflowuniverse.herolib.hero.db
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_ok, new_response_true }
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_true }
import freeflowuniverse.herolib.hero.user { UserRef }
import json
@@ -177,8 +177,13 @@ pub fn (mut self DBMessages) set(o Message) !Message {
return self.db.set[Message](o)!
}
pub fn (mut self DBMessages) delete(id u32) ! {
pub fn (mut self DBMessages) delete(id u32) !bool {
// Check if the item exists before trying to delete
if !self.db.exists[Message](id)! {
return false
}
self.db.delete[Message](id)!
return true
}
pub fn (mut self DBMessages) exist(id u32) !bool {
@@ -238,8 +243,15 @@ pub fn message_handle(mut f ModelsFactory, rpcid int, servercontext map[string]s
}
'delete' {
id := db.decode_u32(params)!
f.messages.delete(id)!
return new_response_ok(rpcid)
deleted := f.messages.delete(id)!
if deleted {
return new_response_true(rpcid)
} else {
return new_error(rpcid,
code: 404
message: 'Message with ID ${id} not found'
)
}
}
'exist' {
id := db.decode_u32(params)!

View File

@@ -3,7 +3,7 @@ module heromodels
import freeflowuniverse.herolib.data.encoder
import freeflowuniverse.herolib.data.ourtime
import freeflowuniverse.herolib.hero.db
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_ok, new_response_true }
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_true }
import freeflowuniverse.herolib.hero.user { UserRef }
import json
@@ -230,8 +230,13 @@ pub fn (mut self DBPlanning) set(o Planning) !Planning {
return self.db.set[Planning](o)!
}
pub fn (mut self DBPlanning) delete(id u32) ! {
pub fn (mut self DBPlanning) delete(id u32) !bool {
// Check if the item exists before trying to delete
if !self.db.exists[Planning](id)! {
return false
}
self.db.delete[Planning](id)!
return true
}
pub fn (mut self DBPlanning) exist(id u32) !bool {
@@ -298,8 +303,15 @@ pub fn planning_handle(mut f ModelsFactory, rpcid int, servercontext map[string]
}
'delete' {
id := db.decode_u32(params)!
f.planning.delete(id)!
return new_response_ok(rpcid)
deleted := f.planning.delete(id)!
if deleted {
return new_response_true(rpcid)
} else {
return new_error(rpcid,
code: 404
message: 'Planning with ID ${id} not found'
)
}
}
'exist' {
id := db.decode_u32(params)!

View File

@@ -3,7 +3,7 @@ module heromodels
import freeflowuniverse.herolib.data.encoder
import freeflowuniverse.herolib.data.ourtime
import freeflowuniverse.herolib.hero.db
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_ok, new_response_true }
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_true }
import freeflowuniverse.herolib.hero.user { UserRef }
import json
@@ -195,8 +195,13 @@ pub fn (mut self DBProfile) set(o Profile) !Profile {
return self.db.set[Profile](o)!
}
pub fn (mut self DBProfile) delete(id u32) ! {
pub fn (mut self DBProfile) delete(id u32) !bool {
// Check if the item exists before trying to delete
if !self.db.exists[Profile](id)! {
return false
}
self.db.delete[Profile](id)!
return true
}
pub fn (mut self DBProfile) exist(id u32) !bool {
@@ -230,8 +235,15 @@ pub fn profile_handle(mut f ModelsFactory, rpcid int, servercontext map[string]s
}
'delete' {
id := db.decode_u32(params)!
f.profile.delete(id)!
return new_response_ok(rpcid)
deleted := f.profile.delete(id)!
if deleted {
return new_response_true(rpcid)
} else {
return new_error(rpcid,
code: 404
message: 'Profile with ID ${id} not found'
)
}
}
'exist' {
id := db.decode_u32(params)!

View File

@@ -3,7 +3,7 @@ module heromodels
import freeflowuniverse.herolib.data.encoder
import freeflowuniverse.herolib.data.ourtime
import freeflowuniverse.herolib.hero.db
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_ok, new_response_true }
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_true }
import freeflowuniverse.herolib.hero.user { UserRef }
import json
@@ -228,8 +228,13 @@ pub fn (mut self DBProject) set(o Project) !Project {
return self.db.set[Project](o)!
}
pub fn (mut self DBProject) delete(id u32) ! {
pub fn (mut self DBProject) delete(id u32) !bool {
// Check if the item exists before trying to delete
if !self.db.exists[Project](id)! {
return false
}
self.db.delete[Project](id)!
return true
}
pub fn (mut self DBProject) exist(id u32) !bool {
@@ -286,8 +291,15 @@ pub fn project_handle(mut f ModelsFactory, rpcid int, servercontext map[string]s
}
'delete' {
id := db.decode_u32(params)!
f.project.delete(id)!
return new_response_ok(rpcid)
deleted := f.project.delete(id)!
if deleted {
return new_response_true(rpcid)
} else {
return new_error(rpcid,
code: 404
message: 'Project with ID ${id} not found'
)
}
}
'exist' {
id := db.decode_u32(params)!

View File

@@ -3,7 +3,7 @@ module heromodels
import freeflowuniverse.herolib.data.encoder
import freeflowuniverse.herolib.data.ourtime
import freeflowuniverse.herolib.hero.db
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_ok, new_response_true }
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_true }
import freeflowuniverse.herolib.hero.user { UserRef }
import json
@@ -254,8 +254,13 @@ pub fn (mut self DBProjectIssue) set(o ProjectIssue) !ProjectIssue {
return self.db.set[ProjectIssue](o)!
}
pub fn (mut self DBProjectIssue) delete(id u32) ! {
pub fn (mut self DBProjectIssue) delete(id u32) !bool {
// Check if the item exists before trying to delete
if !self.db.exists[ProjectIssue](id)! {
return false
}
self.db.delete[ProjectIssue](id)!
return true
}
pub fn (mut self DBProjectIssue) exist(id u32) !bool {
@@ -330,8 +335,15 @@ pub fn project_issue_handle(mut f ModelsFactory, rpcid int, servercontext map[st
}
'delete' {
id := db.decode_u32(params)!
f.project_issue.delete(id)!
return new_response_ok(rpcid)
deleted := f.project_issue.delete(id)!
if deleted {
return new_response_true(rpcid)
} else {
return new_error(rpcid,
code: 404
message: 'Project issue with ID ${id} not found'
)
}
}
'exist' {
id := db.decode_u32(params)!

View File

@@ -3,7 +3,7 @@ module heromodels
import freeflowuniverse.herolib.data.encoder
import freeflowuniverse.herolib.data.ourtime
import freeflowuniverse.herolib.hero.db
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_ok, new_response_true }
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_true }
import freeflowuniverse.herolib.hero.user { UserRef }
import json
@@ -235,8 +235,13 @@ pub fn (mut self DBRegistrationDesk) set(o RegistrationDesk) !RegistrationDesk {
return self.db.set[RegistrationDesk](o)!
}
pub fn (mut self DBRegistrationDesk) delete(id u32) ! {
pub fn (mut self DBRegistrationDesk) delete(id u32) !bool {
// Check if the item exists before trying to delete
if !self.db.exists[RegistrationDesk](id)! {
return false
}
self.db.delete[RegistrationDesk](id)!
return true
}
pub fn (mut self DBRegistrationDesk) exist(id u32) !bool {
@@ -304,8 +309,15 @@ pub fn registration_desk_handle(mut f ModelsFactory, rpcid int, servercontext ma
}
'delete' {
id := db.decode_u32(params)!
f.registration_desk.delete(id)!
return new_response_ok(rpcid)
deleted := f.registration_desk.delete(id)!
if deleted {
return new_response_true(rpcid)
} else {
return new_error(rpcid,
code: 404
message: 'Registration desk with ID ${id} not found'
)
}
}
'exist' {
id := db.decode_u32(params)!

View File

@@ -3,7 +3,7 @@ module heromodels
import freeflowuniverse.herolib.data.encoder
import freeflowuniverse.herolib.data.ourtime
import freeflowuniverse.herolib.hero.db
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_ok, new_response_true }
import freeflowuniverse.herolib.schemas.jsonrpc { Response, new_error, new_response, new_response_false, new_response_int, new_response_true }
import freeflowuniverse.herolib.hero.user { UserRef }
import json
@@ -141,8 +141,13 @@ pub fn (mut self DBUser) set(o User) !User {
return self.db.set[User](o)!
}
pub fn (mut self DBUser) delete(id u32) ! {
pub fn (mut self DBUser) delete(id u32) !bool {
// Check if the item exists before trying to delete
if !self.db.exists[User](id)! {
return false
}
self.db.delete[User](id)!
return true
}
pub fn (mut self DBUser) exist(id u32) !bool {
@@ -192,8 +197,15 @@ pub fn user_handle(mut f ModelsFactory, rpcid int, servercontext map[string]stri
}
'delete' {
id := db.decode_u32(params)!
f.user.delete(id)!
return new_response_ok(rpcid)
deleted := f.user.delete(id)!
if deleted {
return new_response_true(rpcid)
} else {
return new_error(rpcid,
code: 404
message: 'User with ID ${id} not found'
)
}
}
'exist' {
id := db.decode_u32(params)!

View File

@@ -51,7 +51,7 @@ pub fn new_response_true(id int) Response {
pub fn new_response_ok(id int) Response {
return Response{
jsonrpc: jsonrpc_version
result: ''
result: 'true'
id: id
}
}
@@ -96,9 +96,6 @@ pub fn new_error_response(id int, error RPCError) Response {
}
}
// decode_response parses a JSON string into a Response object.
// This function handles the complex validation rules for JSON-RPC responses.
//