/* Options:
Date: 2025-04-23 16:38:35
Version: 8.51
Tip: To override a DTO option, remove "//" prefix before updating
BaseUrl: https://blazor-gallery.servicestack.net

//GlobalNamespace: 
//MakePartial: True
//MakeVirtual: True
//MakeInternal: False
//MakeDataContractsExtensible: False
//AddNullableAnnotations: False
//AddReturnMarker: True
//AddDescriptionAsComments: True
//AddDataContractAttributes: False
//AddIndexesToDataMembers: False
//AddGeneratedCodeAttributes: False
//AddResponseStatus: False
//AddImplicitVersion: 
//InitializeCollections: False
//ExportValueTypes: False
IncludeTypes: CreateContact.*
//ExcludeTypes: 
//AddNamespaces: 
//AddDefaultXmlNamespace: http://schemas.servicestack.net/types
*/

using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization;
using ServiceStack;
using ServiceStack.DataAnnotations;
using MyApp.ServiceModel;

namespace MyApp.ServiceModel
{
    public partial class AppUser
    {
        public virtual string Id { get; set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual string DisplayName { get; set; }
        public virtual string ProfileUrl { get; set; }
    }

    public partial class Contact
    {
        public virtual int Id { get; set; }
        [Computed]
        public virtual string DisplayName { get; set; }

        public virtual string ProfileUrl { get; set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual int? SalaryExpectation { get; set; }
        public virtual string JobType { get; set; }
        public virtual int AvailabilityWeeks { get; set; }
        public virtual EmploymentType PreferredWorkType { get; set; }
        public virtual string PreferredLocation { get; set; }
        public virtual string Email { get; set; }
        public virtual string Phone { get; set; }
        public virtual List<string> Skills { get; set; }
        public virtual string About { get; set; }
        public virtual List<JobApplication> Applications { get; set; } = [];
    }

    public partial class CreateContact
        : IReturn<Contact>, ICreateDb<Contact>
    {
        [Validate("NotEmpty")]
        public virtual string FirstName { get; set; }

        [Validate("NotEmpty")]
        public virtual string LastName { get; set; }

        public virtual string ProfileUrl { get; set; }
        public virtual int? SalaryExpectation { get; set; }
        [Validate("NotEmpty")]
        public virtual string JobType { get; set; }

        public virtual int AvailabilityWeeks { get; set; }
        public virtual EmploymentType PreferredWorkType { get; set; }
        [Validate("NotEmpty")]
        public virtual string PreferredLocation { get; set; }

        [Validate("NotEmpty")]
        public virtual string Email { get; set; }

        public virtual string Phone { get; set; }
        public virtual List<string> Skills { get; set; }
        public virtual string About { get; set; }
    }

    public enum EmploymentType
    {
        FullTime,
        PartTime,
        Casual,
        Contract,
    }

    public partial class Interview
        : AuditBase
    {
        public virtual int Id { get; set; }
        public virtual DateTime BookingTime { get; set; }
        [References(typeof(MyApp.ServiceModel.JobApplication))]
        public virtual int JobApplicationId { get; set; }

        [References(typeof(MyApp.ServiceModel.AppUser))]
        public virtual string AppUserId { get; set; }

        public virtual AppUser AppUser { get; set; }
        public virtual JobApplicationStatus? ApplicationStatus { get; set; }
        public virtual string Notes { get; set; }
    }

    public partial class Job
        : AuditBase
    {
        public virtual int Id { get; set; }
        public virtual string Title { get; set; }
        public virtual EmploymentType EmploymentType { get; set; }
        public virtual string Company { get; set; }
        public virtual string Location { get; set; }
        public virtual int SalaryRangeLower { get; set; }
        public virtual int SalaryRangeUpper { get; set; }
        public virtual string Description { get; set; }
        public virtual List<JobApplication> Applications { get; set; } = [];
        public virtual DateTime Closing { get; set; }
    }

    public partial class JobApplication
    {
        public virtual int Id { get; set; }
        [References(typeof(MyApp.ServiceModel.Job))]
        public virtual int JobId { get; set; }

        [References(typeof(MyApp.ServiceModel.Contact))]
        public virtual int ContactId { get; set; }

        public virtual Job Position { get; set; }
        public virtual Contact Applicant { get; set; }
        public virtual List<JobApplicationComment> Comments { get; set; } = [];
        public virtual DateTime AppliedDate { get; set; }
        public virtual JobApplicationStatus ApplicationStatus { get; set; }
        public virtual List<JobApplicationAttachment> Attachments { get; set; } = [];
        public virtual List<JobApplicationEvent> Events { get; set; } = [];
        public virtual PhoneScreen PhoneScreen { get; set; }
        public virtual Interview Interview { get; set; }
        public virtual JobOffer JobOffer { get; set; }
    }

    public partial class JobApplicationAttachment
    {
        public virtual int Id { get; set; }
        [References(typeof(MyApp.ServiceModel.JobApplication))]
        public virtual int JobApplicationId { get; set; }

        public virtual string FileName { get; set; }
        public virtual string FilePath { get; set; }
        public virtual string ContentType { get; set; }
        public virtual long ContentLength { get; set; }
    }

    public partial class JobApplicationComment
        : AuditBase
    {
        public virtual int Id { get; set; }
        [References(typeof(MyApp.ServiceModel.AppUser))]
        public virtual string AppUserId { get; set; }

        public virtual AppUser AppUser { get; set; }
        [References(typeof(MyApp.ServiceModel.JobApplication))]
        public virtual int JobApplicationId { get; set; }

        public virtual string Comment { get; set; }
    }

    public partial class JobApplicationEvent
        : AuditBase
    {
        public virtual int Id { get; set; }
        [References(typeof(MyApp.ServiceModel.JobApplication))]
        public virtual int JobApplicationId { get; set; }

        [References(typeof(MyApp.ServiceModel.AppUser))]
        public virtual string AppUserId { get; set; }

        public virtual AppUser AppUser { get; set; }
        public virtual string Description { get; set; }
        public virtual JobApplicationStatus? Status { get; set; }
        public virtual DateTime EventDate { get; set; }
    }

    public enum JobApplicationStatus
    {
        Applied,
        PhoneScreening,
        PhoneScreeningCompleted,
        Interview,
        InterviewCompleted,
        Offer,
        Disqualified,
    }

    public partial class JobOffer
        : AuditBase
    {
        public virtual int Id { get; set; }
        public virtual int SalaryOffer { get; set; }
        public virtual string Currency { get; set; }
        [References(typeof(MyApp.ServiceModel.JobApplication))]
        public virtual int JobApplicationId { get; set; }

        [References(typeof(MyApp.ServiceModel.AppUser))]
        public virtual string AppUserId { get; set; }

        public virtual AppUser AppUser { get; set; }
        public virtual string Notes { get; set; }
    }

    public partial class PhoneScreen
        : AuditBase
    {
        public virtual int Id { get; set; }
        [References(typeof(MyApp.ServiceModel.AppUser))]
        public virtual string AppUserId { get; set; }

        public virtual AppUser AppUser { get; set; }
        [References(typeof(MyApp.ServiceModel.JobApplication))]
        public virtual int JobApplicationId { get; set; }

        public virtual JobApplicationStatus? ApplicationStatus { get; set; }
        public virtual string Notes { get; set; }
    }

}