Files
herolib/lib/hero_old/zaz/models/shareholder.v
2025-05-04 08:19:47 +03:00

93 lines
2.6 KiB
V

module models
import freeflowuniverse.herolib.data.ourtime
import freeflowuniverse.herolib.data.encoder
// ShareholderType represents the type of shareholder
pub enum ShareholderType {
individual
corporate
}
// Shareholder represents a shareholder of a company
pub struct Shareholder {
pub mut:
id u32
company_id u32
user_id u32
name string
shares f64
percentage f64
type_ ShareholderType
since ourtime.OurTime
created_at ourtime.OurTime
updated_at ourtime.OurTime
}
// dumps serializes the Shareholder to a byte array
pub fn (shareholder Shareholder) dumps() ![]u8 {
mut enc := encoder.new()
// Add unique encoding ID to identify this type of data
enc.add_u16(403) // Unique ID for Shareholder type
// Encode Shareholder fields
enc.add_u32(shareholder.id)
enc.add_u32(shareholder.company_id)
enc.add_u32(shareholder.user_id)
enc.add_string(shareholder.name)
enc.add_string(shareholder.shares.str()) // Store shares as string to preserve precision
enc.add_string(shareholder.percentage.str()) // Store percentage as string to preserve precision
enc.add_u8(u8(shareholder.type_))
enc.add_string(shareholder.since.str())
enc.add_string(shareholder.created_at.str())
enc.add_string(shareholder.updated_at.str())
return enc.data
}
// loads deserializes a byte array to a Shareholder
pub fn shareholder_loads(data []u8) !Shareholder {
mut d := encoder.decoder_new(data)
mut shareholder := Shareholder{}
// Check encoding ID to verify this is the correct type of data
encoding_id := d.get_u16()!
if encoding_id != 403 {
return error('Wrong file type: expected encoding ID 403, got ${encoding_id}, for shareholder')
}
// Decode Shareholder fields
shareholder.id = d.get_u32()!
shareholder.company_id = d.get_u32()!
shareholder.user_id = d.get_u32()!
shareholder.name = d.get_string()!
shares_str := d.get_string()!
shareholder.shares = shares_str.f64()
percentage_str := d.get_string()!
shareholder.percentage = percentage_str.f64()
shareholder.type_ = unsafe { ShareholderType(d.get_u8()!) }
since_str := d.get_string()!
shareholder.since = ourtime.new(since_str)!
created_at_str := d.get_string()!
shareholder.created_at = ourtime.new(created_at_str)!
updated_at_str := d.get_string()!
shareholder.updated_at = ourtime.new(updated_at_str)!
return shareholder
}
// index_keys returns the keys to be indexed for this shareholder
pub fn (shareholder Shareholder) index_keys() map[string]string {
mut keys := map[string]string{}
keys['id'] = shareholder.id.str()
keys['company_id'] = shareholder.company_id.str()
keys['user_id'] = shareholder.user_id.str()
return keys
}