added domain logic and validated fields for models