diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Banks/BankAccountDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Banks/BankAccountDto.cs deleted file mode 100644 index 4e928c4..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Banks/BankAccountDto.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Banks; - -public class BankAccountDto : AuditedEntityDto -{ - public string AccountNumber { get; set; } - public Guid BankId { get; set; } - public string BankName { get; set; } - - public string AccountOwner { get; set; } - - public string Currency { get; set; } - - public bool CanTransferMoney { get; set; } - - public string Company { get; set; } -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Banks/BankDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Banks/BankDto.cs deleted file mode 100644 index c30237d..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Banks/BankDto.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Banks; - -public class BankDto : AuditedEntityDto -{ - public string Name { get; set; } - public string IdentifierCode { get; set; } - - public string Address1 { get; set; } - public string Address2 { get; set; } - public string District { get; set; } - public string City { get; set; } - public string PostalCode { get; set; } - public string Country { get; set; } - public string PhoneNumber { get; set; } - public string Email { get; set; } -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Classroom/ClassroomChatDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Classroom/ClassroomChatDto.cs deleted file mode 100644 index fdea83f..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Classroom/ClassroomChatDto.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace Sozsoft.Platform.Classrooms; - -public class ClassroomChatDto -{ - public Guid Id { get; set; } - public Guid SessionId { get; set; } - public Guid SenderId { get; set; } - public string SenderName { get; set; } - public string Message { get; set; } - public DateTime Timestamp { get; set; } - public Guid? RecipientId { get; set; } - public string? RecipientName { get; set; } - public bool IsTeacher { get; set; } - public string MessageType { get; set; } -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Classroom/ClassroomDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Classroom/ClassroomDto.cs deleted file mode 100644 index d7535bb..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Classroom/ClassroomDto.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Text.Json; -using System.Text.Json.Serialization; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Classrooms; - -public class ClassroomDto : FullAuditedEntityDto -{ - public string Name { get; set; } - public string Description { get; set; } - public string Subject { get; set; } - public Guid TeacherId { get; set; } - public string TeacherName { get; set; } - public DateTime ScheduledStartTime { get; set; } - public DateTime? ScheduledEndTime { get; set; } - public int Duration { get; set; } - public DateTime? ActualStartTime { get; set; } - public DateTime? ActualEndTime { get; set; } - public int MaxParticipants { get; set; } - public int ParticipantCount { get; set; } - - [JsonIgnore] - public string SettingsJson { get; set; } - public ClassroomSettingsDto SettingsDto - { - get - { - if (!string.IsNullOrEmpty(SettingsJson)) - return JsonSerializer.Deserialize(SettingsJson); - - return new ClassroomSettingsDto(); - } - set { SettingsJson = JsonSerializer.Serialize(value); } - } -} - -public class ClassroomSettingsDto -{ - public bool AllowHandRaise { get; set; } - public bool AllowStudentChat { get; set; } - public bool AllowPrivateMessages { get; set; } - public bool AllowStudentScreenShare { get; set; } - public string DefaultMicrophoneState { get; set; } = "muted"; // 'muted' | 'unmuted' - public string DefaultCameraState { get; set; } = "off"; // 'on' | 'off' - public string DefaultLayout { get; set; } = "grid"; - public bool AutoMuteNewParticipants { get; set; } -} - -public class GetClassroomListDto : PagedAndSortedResultRequestDto -{ - public bool? IsActive { get; set; } - public Guid? TeacherId { get; set; } -} - -public class ClassroomAttendanceDto : EntityDto -{ - public Guid SessionId { get; set; } - public Guid StudentId { get; set; } - public string StudentName { get; set; } - public DateTime JoinTime { get; set; } - public DateTime? LeaveTime { get; set; } - public int TotalDurationMinutes { get; set; } -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Classroom/ClassroomFilterInputDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Classroom/ClassroomFilterInputDto.cs deleted file mode 100644 index 17ee945..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Classroom/ClassroomFilterInputDto.cs +++ /dev/null @@ -1,7 +0,0 @@ -using Volo.Abp.Application.Dtos; - -public class ClassroomFilterInputDto : PagedAndSortedResultRequestDto -{ - public string Search { get; set; } - public string Status { get; set; } -} \ No newline at end of file diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Classroom/ClassroomParticipantDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Classroom/ClassroomParticipantDto.cs deleted file mode 100644 index 15cd349..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Classroom/ClassroomParticipantDto.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; - -namespace Sozsoft.Platform.Classrooms; - -public class ClassroomParticipantDto -{ - public Guid Id { get; set; } - public Guid SessionId { get; set; } - public Guid UserId { get; set; } - public string UserName { get; set; } - public bool IsTeacher { get; set; } - public bool IsAudioMuted { get; set; } - public bool IsVideoMuted { get; set; } - public bool IsHandRaised { get; set; } - public bool IsKicked { get; set; } - public DateTime JoinTime { get; set; } - public bool IsActive { get; set; } -} - diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Classroom/IClassroomAppService.cs b/api/src/Sozsoft.Platform.Application.Contracts/Classroom/IClassroomAppService.cs deleted file mode 100644 index 4eda565..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Classroom/IClassroomAppService.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; - -namespace Sozsoft.Platform.Classrooms; - -public interface IClassroomAppService : IApplicationService -{ - Task GetAsync(Guid id); - Task> GetListAsync(ClassroomFilterInputDto input); - Task CreateAsync(ClassroomDto input); - Task UpdateAsync(Guid id, ClassroomDto input); - Task DeleteAsync(Guid id); - Task StartClassAsync(Guid id); - Task EndClassAsync(Guid id); - Task JoinClassAsync(Guid id); - Task LeaveClassAsync(Guid id); - Task> GetAttendanceAsync(Guid sessionId); -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Currencies/CurrencyDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Currencies/CurrencyDto.cs deleted file mode 100644 index 61c6acb..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Currencies/CurrencyDto.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Currencies; - -public class CurrencyDto : AuditedEntityDto -{ - public string Code { get; set; } - public string Symbol { get; set; } - public string Name { get; set; } - public decimal Rate { get; set; } - public bool IsActive { get; set; } - public DateTime? LastUpdated { get; set; } -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/AnnouncementDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/AnnouncementDto.cs deleted file mode 100644 index a0692ad..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/AnnouncementDto.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class AnnouncementDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - - public string Title { get; set; } - public string Excerpt { get; set; } - public string Content { get; set; } - public string ImageUrl { get; set; } - public string Category { get; set; } - public Guid? EmployeeId { get; set; } - public EmployeeDto Employee { get; set; } - public DateTime PublishDate { get; set; } - public DateTime? ExpiryDate { get; set; } - public bool IsPinned { get; set; } - public int ViewCount { get; set; } - public string[] Departments { get; set; } - public string Attachments { get; set; } -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/CurrencyDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/CurrencyDto.cs deleted file mode 100644 index 7892db0..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/CurrencyDto.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class CurrencyDto : FullAuditedEntityDto -{ - public string Code { get; set; } // TRY, USD, EUR - public string Symbol { get; set; } // ₺, $, etc. - public string Name { get; set; } // Turkish lira, US dollar, ... - public decimal Rate { get; set; } // TRY başına değer - public bool IsActive { get; set; } - public DateTime? LastUpdated { get; set; } -} - diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/DepartmentDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/DepartmentDto.cs deleted file mode 100644 index 63aa4da..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/DepartmentDto.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class DepartmentDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - public string Name { get; set; } - public string Description { get; set; } - public Guid? ParentDepartmentId { get; set; } - public string ParentDepartmentName { get; set; } - public Guid? ManagerId { get; set; } - public string ManagerName { get; set; } - public Guid? CostCenterId { get; set; } - public string CostCenterName { get; set; } - public decimal Budget { get; set; } - public bool IsActive { get; set; } - public List SubDepartments { get; set; } = []; -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EmployeeDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EmployeeDto.cs deleted file mode 100644 index 80fd06d..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EmployeeDto.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class EmployeeDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - - public string Code { get; set; } - public string Name { get; set; } - public string Avatar { get; set; } - public string NationalId { get; set; } - public DateTime BirthDate { get; set; } - public string Gender { get; set; } - public string MaritalStatus { get; set; } - - // Embedded Address - public string Country { get; set; } - public string City { get; set; } - public string District { get; set; } - public string Township { get; set; } - public string PostalCode { get; set; } - public string PhoneNumber { get; set; } - public string MobileNumber { get; set; } - public string Email { get; set; } - public string Address1 { get; set; } - public string Address2 { get; set; } - - // Emergency contact - public string EmergencyContactName { get; set; } - public string EmergencyContactRelationship { get; set; } - public long EmergencyContactPhoneNumber { get; set; } - - public DateTime HireDate { get; set; } - public DateTime? TerminationDate { get; set; } - - public Guid? EmploymentTypeId { get; set; } - public EmploymentTypeDto EmploymentType { get; set; } - - public string? JobPositionId { get; set; } - public JobPositionDto JobPosition { get; set; } - - public Guid? DepartmentId { get; set; } - public DepartmentDto Department { get; set; } - - public string WorkLocation { get; set; } - - public Guid? ManagerId { get; set; } - public EmployeeDto Manager { get; set; } - - public decimal BaseSalary { get; set; } - public string Currency { get; set; } - - public string PayrollGroup { get; set; } // e.g., Monthly, Biweekly, Weekly - - public Guid BankId { get; set; } - public string IbanNumber { get; set; } - public Guid? BadgeId { get; set; } - - public string EmployeeStatus { get; set; } - public bool IsActive { get; set; } -} - diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EmploymentTypeDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EmploymentTypeDto.cs deleted file mode 100644 index cc38048..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EmploymentTypeDto.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class EmploymentTypeDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - - public string Name { get; set; } -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EventCommentDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EventCommentDto.cs deleted file mode 100644 index 0afa49f..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EventCommentDto.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; - -namespace Sozsoft.Platform.Intranet; - -public class EventCommentDto -{ - public string Id { get; set; } - public EventOrganizerDto Employee { get; set; } - public string Content { get; set; } - public DateTime CreationTime { get; set; } - public int Likes { get; set; } -} - diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EventDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EventDto.cs deleted file mode 100644 index 9c97e9c..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EventDto.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace Sozsoft.Platform.Intranet; - -public class EventDto -{ - public string Id { get; set; } - public string CategoryName { get; set; } - public string TypeName { get; set; } - public DateTime Date { get; set; } - public string Name { get; set; } - public string Description { get; set; } - public string Place { get; set; } - public EventOrganizerDto Organizer { get; set; } - public int Participants { get; set; } - public List Photos { get; set; } = new(); - public List Comments { get; set; } = new(); - public int Likes { get; set; } - public bool IsPublished { get; set; } -} - diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EventOrganizerDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EventOrganizerDto.cs deleted file mode 100644 index 1e50575..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/EventOrganizerDto.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -namespace Sozsoft.Platform.Intranet; - -public class EventOrganizerDto -{ - public Guid Id { get; set; } - public string Name { get; set; } - public string Position { get; set; } - public string Avatar { get; set; } -} - diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ExpenseDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ExpenseDto.cs deleted file mode 100644 index 8fb0529..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ExpenseDto.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class ExpenseDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - - public Guid? EmployeeId { get; set; } - public EmployeeDto Employee { get; set; } - - public string Category { get; set; } - public decimal Amount { get; set; } - public string Currency { get; set; } - - public DateTime RequestDate { get; set; } - public string Description { get; set; } - public string Project { get; set; } - public string Status { get; set; } - public Guid? ApproverId { get; set; } - public EmployeeDto Approver { get; set; } - public DateTime? ApprovalDate { get; set; } - public string RejectionReason { get; set; } - public string Notes { get; set; } -} - diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ExpensesDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ExpensesDto.cs deleted file mode 100644 index 2912c2d..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ExpensesDto.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections.Generic; -using Sozsoft.Platform.Intranet; - -public class ExpensesDto -{ - public decimal TotalRequested { get; set; } - public decimal TotalApproved { get; set; } - public List Last5Expenses { get; set; } = []; -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/IIntranetAppService.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/IIntranetAppService.cs deleted file mode 100644 index c815dba..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/IIntranetAppService.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Application.Services; - -namespace Sozsoft.Platform.Intranet; - -public interface IIntranetAppService : IApplicationService -{ - Task GetIntranetDashboardAsync(); -} - - diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/IntranetDashboardDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/IntranetDashboardDto.cs deleted file mode 100644 index 76d20bf..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/IntranetDashboardDto.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections.Generic; -using Sozsoft.Platform.FileManagement; - -namespace Sozsoft.Platform.Intranet; - -public class IntranetDashboardDto -{ - public List Events { get; set; } = []; - public List Birthdays { get; set; } = []; - public List Visitors { get; set; } = []; - public List Reservations { get; set; } = []; - public List Trainings { get; set; } = []; - public ExpensesDto Expenses { get; set; } = new ExpensesDto(); - public List Documents { get; set; } = []; - public List Announcements { get; set; } = []; - public List ShuttleRoutes { get; set; } = []; - public List Meals { get; set; } = []; - public List Leaves { get; set; } = []; - public List Overtimes { get; set; } = []; - public List Surveys { get; set; } = []; - public List SocialPosts { get; set; } = []; - public List Tasks { get; set; } = []; -} - - diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/JobPositionDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/JobPositionDto.cs deleted file mode 100644 index 8d9d618..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/JobPositionDto.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class JobPositionDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - - public string Name { get; set; } - public string Description { get; set; } - - public Guid? DepartmentId { get; set; } - public string DepartmentName { get; set; } - - public string Level { get; set; } - public decimal MinSalary { get; set; } - public decimal MaxSalary { get; set; } - public string Currency { get; set; } - public string RequiredSkills { get; set; } - public string Responsibilities { get; set; } - public string Qualifications { get; set; } - public bool IsActive { get; set; } -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/LeaveDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/LeaveDto.cs deleted file mode 100644 index 591c857..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/LeaveDto.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class LeaveDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - - public Guid EmployeeId { get; set; } - public EmployeeDto Employee { get; set; } - - public string LeaveType { get; set; } - public DateTime StartDate { get; set; } - public DateTime EndDate { get; set; } - public decimal TotalDays { get; set; } - public bool IsHalfDay { get; set; } - public string Reason { get; set; } - public string Status { get; set; } - public DateTime AppliedDate { get; set; } - public Guid? ApprovedById { get; set; } - public EmployeeDto ApprovedBy { get; set; } - public DateTime? ApprovedDate { get; set; } - public string RejectionReason { get; set; } - public string Attachments { get; set; } -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/MealDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/MealDto.cs deleted file mode 100644 index 8199edf..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/MealDto.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class MealDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - public Guid? BranchId { get; set; } - - public DateTime Date { get; set; } - public string Type { get; set; } - public decimal TotalCalorie { get; set; } - public string[] Materials { get; set; } -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/OvertimeDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/OvertimeDto.cs deleted file mode 100644 index 9239762..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/OvertimeDto.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class OvertimeDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - - public Guid EmployeeId { get; set; } - public EmployeeDto Employee { get; set; } // Navigation'dan doldurulabilir - - public DateTime Date { get; set; } // Mesai tarihi - public DateTime StartTime { get; set; } // Başlangıç zamanı - public DateTime EndTime { get; set; } // Bitiş zamanı - public decimal TotalHours { get; set; } // Toplam fazla mesai süresi - public string Reason { get; set; } // Fazla mesai nedeni - public string Status { get; set; } // Durum: "Bekliyor", "Onaylandı", "Reddedildi" - public Guid? ApprovedById { get; set; } // Onaylayan kişi ID - public DateTime? ApprovedDate { get; set; } // Onay tarihi - public string RejectionReason { get; set; } // Reddetme nedeni - public decimal Rate { get; set; } // Fazla mesai oranı (ör. 1.5x) - public decimal? Amount { get; set; } // Hesaplanan ödeme tutarı -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ProjectTaskDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ProjectTaskDto.cs deleted file mode 100644 index da06bd1..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ProjectTaskDto.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class ProjectTaskDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - - public Guid? ProjectId { get; set; } - public Guid? PhaseId { get; set; } - - public string Name { get; set; } - public string Description { get; set; } - - public string? TaskTypeId { get; set; } - - public string Priority { get; set; } - public string? StatusId { get; set; } - - public Guid? EmployeeId { get; set; } - public EmployeeDto Employee { get; set; } - - public DateTime StartDate { get; set; } - public DateTime EndDate { get; set; } - - public int Progress { get; set; } - public bool IsActive { get; set; } -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ReservationDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ReservationDto.cs deleted file mode 100644 index 0364568..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ReservationDto.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class ReservationDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - - public string Type { get; set; } // room | vehicle | equipment - public string ResourceName { get; set; } - - public Guid? EmployeeId { get; set; } - public string EmployeeName { get; set; } // Optional: ilişkili personel ismi - - public DateTime StartDate { get; set; } - public DateTime EndDate { get; set; } - public string Purpose { get; set; } // Amaç - public int? Participants { get; set; } // Katılımcı Sayısı - public string Notes { get; set; } - public string Status { get; set; } // pending | approved | rejected | completed -} - diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ShuttleRouteDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ShuttleRouteDto.cs deleted file mode 100644 index 19d62f3..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/ShuttleRouteDto.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class ShuttleRouteDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - - public string Type { get; set; } // Örn: "Servis", "Transfer", "Ring" - public string Name { get; set; } // Hat adı veya açıklaması - public string DepartureTime { get; set; } // Kalkış saati - public string ArrivalTime { get; set; } // Varış saati - public int Capacity { get; set; } // Toplam kapasite - public int Available { get; set; } // Mevcut boş koltuk sayısı - public string[] Route { get; set; } // JSON veya metin formatında güzergah bilgisi -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/SocialPostDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/SocialPostDto.cs deleted file mode 100644 index 3e12c4b..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/SocialPostDto.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Collections.Generic; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class SocialPostDto : FullAuditedEntityDto -{ - public Guid? EmployeeId { get; set; } - public EmployeeDto? Employee { get; set; } - public string Content { get; set; } - - public int LikeCount { get; set; } - public bool IsLiked { get; set; } - public bool IsOwnPost { get; set; } - - public SocialLocationDto? Location { get; set; } - public SocialMediaDto? Media { get; set; } - public List Comments { get; set; } - public List Likes { get; set; } -} - -public class SocialLocationDto : FullAuditedEntityDto -{ - public Guid SocialPostId { get; set; } - public string Name { get; set; } - public string? Address { get; set; } - public double? Lat { get; set; } - public double? Lng { get; set; } - public string? PlaceId { get; set; } -} - -public class SocialMediaDto : FullAuditedEntityDto -{ - public Guid SocialPostId { get; set; } - public string Type { get; set; } // image | video | poll - public string[] Urls { get; set; } - - // Poll Fields - public string? PollQuestion { get; set; } - public int? PollTotalVotes { get; set; } - public DateTime? PollEndsAt { get; set; } - public string? PollUserVoteId { get; set; } - - public List PollOptions { get; set; } -} - -public class SocialPollOptionDto : FullAuditedEntityDto -{ - public Guid SocialMediaId { get; set; } - public string Text { get; set; } - public int Votes { get; set; } -} - -public class SocialCommentDto : FullAuditedEntityDto -{ - public Guid SocialPostId { get; set; } - public Guid? EmployeeId { get; set; } - public EmployeeDto? Employee { get; set; } - public string Content { get; set; } -} - -public class SocialLikeDto : FullAuditedEntityDto -{ - public Guid SocialPostId { get; set; } - public Guid? EmployeeId { get; set; } - public EmployeeDto? Employee { get; set; } -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/SurveyDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/SurveyDto.cs deleted file mode 100644 index bbf7dba..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/SurveyDto.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class SurveyDto : FullAuditedEntityDto -{ - public string Title { get; set; } - public string Description { get; set; } - public DateTime Deadline { get; set; } - public int Responses { get; set; } - public string Status { get; set; } // draft | active | closed - public bool IsAnonymous { get; set; } - - public List Questions { get; set; } -} - -public class SurveyQuestionDto : FullAuditedEntityDto -{ - public Guid SurveyId { get; set; } - public string QuestionText { get; set; } - public string Type { get; set; } // rating | multiple-choice | text | textarea | yes-no - public int Order { get; set; } - public bool IsRequired { get; set; } - - public List Options { get; set; } -} - -public class SurveyQuestionOptionDto : FullAuditedEntityDto -{ - public Guid QuestionId { get; set; } - public string Text { get; set; } - public int Order { get; set; } -} - -public class SurveyResponseDto : FullAuditedEntityDto -{ - public Guid SurveyId { get; set; } - public Guid? EmployeeId { get; set; } - public DateTime SubmissionTime { get; set; } - - public List Answers { get; set; } -} - -public class SurveyAnswerDto : FullAuditedEntityDto -{ - public Guid ResponseId { get; set; } - public Guid QuestionId { get; set; } - public string QuestionType { get; set; } - public string Value { get; set; } -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/TrainingDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/TrainingDto.cs deleted file mode 100644 index 437ac1e..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/TrainingDto.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class TrainingDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - - public string Title { get; set; } - public string Description { get; set; } - public string Instructor { get; set; } - public string Category { get; set; } // technical | soft-skills | management | compliance | other - public string Type { get; set; } // online | classroom | hybrid - public int Duration { get; set; } // saat veya gün olarak - public DateTime StartDate { get; set; } - public DateTime EndDate { get; set; } - public int MaxParticipants { get; set; } - public int Enrolled { get; set; } - public string Status { get; set; } // upcoming | ongoing | completed - public string Location { get; set; } - public string Thumbnail { get; set; } - - // İlişkili veriler - public int CertificateCount { get; set; } // optional: ilişkili sertifika sayısı -} - diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/VisitorDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Intranet/VisitorDto.cs deleted file mode 100644 index be107ab..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Intranet/VisitorDto.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Intranet; - -public class VisitorDto : FullAuditedEntityDto -{ - public Guid? TenantId { get; set; } - - public string Name { get; set; } - public string CompanyName { get; set; } - public string Email { get; set; } - public string PhoneNumber { get; set; } - public string Purpose { get; set; } - public DateTime VisitDate { get; set; } - public DateTime? CheckIn { get; set; } - public DateTime? CheckOut { get; set; } - public Guid? EmployeeId { get; set; } - public EmployeeDto Employee { get; set; } - public string Status { get; set; } - public string BadgeNumber { get; set; } - public string Photo { get; set; } -} - diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Public/BlogPostDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Public/BlogPostDto.cs index b1aaec8..c2d7bfe 100644 --- a/api/src/Sozsoft.Platform.Application.Contracts/Public/BlogPostDto.cs +++ b/api/src/Sozsoft.Platform.Application.Contracts/Public/BlogPostDto.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using Sozsoft.Platform.Intranet; +using Sozsoft.Platform.Identity.Dto; using Volo.Abp.Application.Dtos; namespace Sozsoft.Platform.Public; @@ -18,8 +18,8 @@ public class BlogPostDto : FullAuditedEntityDto public Guid CategoryId { get; set; } public BlogCategoryDto Category { get; set; } - public Guid EmployeeId { get; set; } - public EmployeeDto Employee { get; set; } + public Guid UserId { get; set; } + public UserInfoViewModel User { get; set; } public int ViewCount { get; set; } public int LikeCount { get; set; } diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Public/BlogPostListDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Public/BlogPostListDto.cs index 19b7ad1..219b759 100644 --- a/api/src/Sozsoft.Platform.Application.Contracts/Public/BlogPostListDto.cs +++ b/api/src/Sozsoft.Platform.Application.Contracts/Public/BlogPostListDto.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using Sozsoft.Platform.Identity.Dto; -using Sozsoft.Platform.Intranet; using Volo.Abp.Application.Dtos; namespace Sozsoft.Platform.Public; diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Question/QuestionDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Question/QuestionDto.cs deleted file mode 100644 index c1796e3..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Question/QuestionDto.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Questions; - -public class QuestionDto : FullAuditedEntityDto -{ - public string QuestionType { get; set; } - public int Points { get; set; } - public string Title { get; set; } - public string Content { get; set; } - public string MediaUrl { get; set; } - public string MediaType { get; set; } - public string CorrectAnswer { get; set; } - public string Difficulty { get; set; } - public int TimeLimit { get; set; } - public string Explanation { get; set; } - - public Guid QuestionPoolId { get; set; } - public List Options { get; set; } = new(); -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Question/QuestionOptionDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Question/QuestionOptionDto.cs deleted file mode 100644 index c78b323..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Question/QuestionOptionDto.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Questions; - -public class QuestionOptionDto : FullAuditedEntityDto -{ - public string Text { get; set; } - public bool IsCorrect { get; set; } - - public Guid QuestionPoolId { get; set; } - public Guid QuestionId { get; set; } -} diff --git a/api/src/Sozsoft.Platform.Application.Contracts/Question/QuestionPoolDto.cs b/api/src/Sozsoft.Platform.Application.Contracts/Question/QuestionPoolDto.cs deleted file mode 100644 index 73f8b80..0000000 --- a/api/src/Sozsoft.Platform.Application.Contracts/Question/QuestionPoolDto.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Collections.Generic; -using Volo.Abp.Application.Dtos; - -namespace Sozsoft.Platform.Questions; - -public class QuestionPoolDto : FullAuditedEntityDto -{ - public string Name { get; set; } - public string Description { get; set; } - public string Tags { get; set; } - - public List Questions { get; set; } = new(); -} diff --git a/api/src/Sozsoft.Platform.Application/Public/PublicAppService.cs b/api/src/Sozsoft.Platform.Application/Public/PublicAppService.cs index b6023fa..7b03509 100644 --- a/api/src/Sozsoft.Platform.Application/Public/PublicAppService.cs +++ b/api/src/Sozsoft.Platform.Application/Public/PublicAppService.cs @@ -12,8 +12,6 @@ using Volo.Abp.Domain.Entities; using System.Linq; using Volo.Abp.Application.Dtos; using System.Text.Json; -using Sozsoft.Platform.Intranet; -using Microsoft.AspNetCore.Identity; using Volo.Abp.Identity; using Sozsoft.Platform.Identity.Dto; diff --git a/api/src/Sozsoft.Platform.Domain/Branch/BranchSeederDto.cs b/api/src/Sozsoft.Platform.Domain/Branch/BranchSeederDto.cs index d16c1b4..d960839 100644 --- a/api/src/Sozsoft.Platform.Domain/Branch/BranchSeederDto.cs +++ b/api/src/Sozsoft.Platform.Domain/Branch/BranchSeederDto.cs @@ -1,46 +1,10 @@ -using System; -using System.Collections.Generic; -using Sozsoft.Platform.Entities; +using System.Collections.Generic; namespace Sozsoft.Platform.Branchs; public class BranchSeederDto { - public List RegistrationTypes { get; set; } - public List RegistrationMethods { get; set; } - public List ClassTypes { get; set; } - public List Classes { get; set; } - public List Levels { get; set; } - public List LessonPeriods { get; set; } - public List Schedules { get; set; } - public List Meals { get; set; } public List Banks { get; set; } - public List Cashes { get; set; } - public List CurrentAccounts { get; set; } -} - -public class CurrentAccountSeedDto -{ - public string Code { get; set; } - public string Name { get; set; } - public string Description { get; set; } - public long? TaxNumber { get; set; } - public string TaxOffice { get; set; } - public decimal CreditLimit { get; set; } - public decimal Balance { get; set; } - public string Currency { get; set; } - public string Risk { get; set; } //Low, Medium, High, Blocked - public bool IsActive { get; set; } -} - -public class CashSeedDto -{ - public string Code { get; set; } - public string Name { get; set; } - public string Description { get; set; } - public string Currency { get; set; } - public decimal Balance { get; set; } - public bool IsActive { get; set; } } public class BankSeedDto @@ -55,85 +19,4 @@ public class BankSeedDto public string PostalCode { get; set; } public string PhoneNumber { get; set; } public string Email { get; set; } -} - -public class MealSeedDto -{ - public DateTime Date { get; set; } - public string Type { get; set; } - public decimal TotalCalorie { get; set; } - public string Materials { get; set; } -} - -public class RegistrationTypeSeedDto -{ - public string Name { get; set; } - public string Status { get; set; } -} - -public class RegistrationMethodSeedDto -{ - public string RegistrationTypeName { get; set; } - public string Name { get; set; } - public string Status { get; set; } -} - -public class ClassTypeSeedDto -{ - public string RegistrationTypeName { get; set; } - public string Name { get; set; } - public int? MinStudentCount { get; set; } - public int? MaxStudentCount { get; set; } - public string Status { get; set; } -} - -public class ClassSeedDto -{ - public string ClassTypeName { get; set; } - public string Name { get; set; } - public string Status { get; set; } -} - -public class LevelSeedDto -{ - public string ClassTypeName { get; set; } - public string LevelType { get; set; } - public string Name { get; set; } - public int Order { get; set; } - public int LessonCount { get; set; } - public string Status { get; set; } - public int? LessonDuration { get; set; } - public decimal? MonthlyPaymentRate { get; set; } -} - -public class LessonPeriodSeedDto -{ - public string Name { get; set; } - public string Day { get; set; } - - public string Lesson1 { get; set; } - public string Lesson2 { get; set; } - public string Lesson3 { get; set; } - public string Lesson4 { get; set; } -} - -public class ScheduleSeedDto -{ - public string Name { get; set; } - public string Status { get; set; } - public string StartTime { get; set; } - public string EndTime { get; set; } - public int LessonMinute { get; set; } - public int LessonBreakMinute { get; set; } - public int LessonCount { get; set; } - public string LunchTime { get; set; } - public int? LunchMinute { get; set; } - public bool? IncludeLunch { get; set; } - public bool? Monday { get; set; } - public bool? Tuesday { get; set; } - public bool? Wednesday { get; set; } - public bool? Thursday { get; set; } - public bool? Friday { get; set; } - public bool? Saturday { get; set; } - public bool? Sunday { get; set; } -} +} \ No newline at end of file diff --git a/api/src/Sozsoft.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs b/api/src/Sozsoft.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs index eacf2af..d0b1551 100644 --- a/api/src/Sozsoft.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs +++ b/api/src/Sozsoft.Platform.EntityFrameworkCore/Tenants/TenantSeederDto.cs @@ -9,30 +9,32 @@ public class TenantSeederDto { //Saas public List GlobalSearch { get; set; } - public List ForumCategories { get; set; } public List CustomEndpoints { get; set; } public List CustomComponents { get; set; } - public List ReportCategories { get; set; } + + //Tanımlamalar + public List Sectors { get; set; } + public List WorkHours { get; set; } public List UomCategories { get; set; } public List Uoms { get; set; } public List SkillTypes { get; set; } public List Skills { get; set; } public List SkillLevels { get; set; } + public List Abouts { get; set; } public List Services { get; set; } public List PaymentMethods { get; set; } public List InstallmentOptions { get; set; } public List BlogCategories { get; set; } public List BlogPosts { get; set; } - public List Contacts { get; set; } public List Products { get; set; } - - //Tanımlamalar - public List Sectors { get; set; } - public List WorkHours { get; set; } + public List Contacts { get; set; } //Report Templates + public List ReportCategories { get; set; } public List ReportTemplates { get; set; } + + public List ForumCategories { get; set; } } public class GlobalSearchSeedDto diff --git a/api/src/Sozsoft.Platform.HttpApi.Host/PlatformHttpApiHostModule.cs b/api/src/Sozsoft.Platform.HttpApi.Host/PlatformHttpApiHostModule.cs index 1264431..772588a 100644 --- a/api/src/Sozsoft.Platform.HttpApi.Host/PlatformHttpApiHostModule.cs +++ b/api/src/Sozsoft.Platform.HttpApi.Host/PlatformHttpApiHostModule.cs @@ -7,7 +7,6 @@ using Hangfire.PostgreSql; using Sozsoft.Languages; using Sozsoft.MailQueue; using Sozsoft.Notifications.Application; -using Sozsoft.Platform.Classrooms; using Sozsoft.Platform.EntityFrameworkCore; using Sozsoft.SqlQueryManager; using Sozsoft.Platform.Extensions; diff --git a/api/src/Sozsoft.Platform.HttpApi.Host/Program.cs b/api/src/Sozsoft.Platform.HttpApi.Host/Program.cs index a15c6f8..0cc80af 100644 --- a/api/src/Sozsoft.Platform.HttpApi.Host/Program.cs +++ b/api/src/Sozsoft.Platform.HttpApi.Host/Program.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.IO; using System.Threading.Tasks; -using Sozsoft.Platform.Classrooms; using Sozsoft.Platform.Enums; using Sozsoft.Platform.DynamicServices; using Microsoft.AspNetCore.Builder; diff --git a/ui/public/version.json b/ui/public/version.json index 63828e1..8c11009 100644 --- a/ui/public/version.json +++ b/ui/public/version.json @@ -1,314 +1,4 @@ { - "commit": "809bfb71", - "releases": [ - { - "version": "1.0.40", - "buildDate": "2026-01-17", - "commit": "52c93ccbaf1be1c8365097e97276f48988864de4", - "changeLog": [ - "- Grid üzerinden Dil desteği güncellemeleri yapıldı.", - "- Nodejs 24 versiyonuna geçildi.", - "- Grid ve Popup içerisinde Numeric formatlar geliştirildi.", - "- File Management geliştirildi.", - "- XtraReport viewer ve desing komponentleri geliştirildi.", - "- Devexpress Licenceı artırıldı." - ] - }, - { - "version": "1.0.37", - "buildDate": "2025-12-07", - "commit": "8fd2d58c0f629af466df87dd8b03a17d9c44ceb2", - "changeLog": [ - "- Before ve After Insert Command", - "- Before ve After Update Command", - "- Before ve After Delete Command", - "Bu tanımlamalar artık liste formlarda çalıştırıldı test edildi." - ] - }, - { - "version": "1.0.36", - "buildDate": "2025-12-06", - "commit": "9938acb94c3758a54bcb8593690825b63a4ab54f", - "changeLog": [ - "SQL Query Manager komponentin üretildi. Artık uygulama üzerinden veritabanına hükmedilebilecek." - ] - }, - { - "version": "1.0.34", - "buildDate": "2025-11-18", - "commit": "07f03bdf3c2a6e57e80ee83cfaba45042abde994", - "changeLog": [ - "- Subform içinde ilişkili sütun düzenlemesi", - "- Grid Popup Autonumber özelliği", - "- TreeView ve GridView düzeltmeleri" - ] - }, - { - "version": "1.0.33", - "buildDate": "2025-10-26", - "commit": "78cce3d4fb126ccfaedff0f53da8661261e1ce44", - "changeLog": [ - "Dosya Yönetimi ve Intranet menüsün hazılanması" - ] - }, - { - "version": "1.0.32", - "buildDate": "2025-10-15", - "commit": "8564bff367eefb62b1cfd7ac5790097fcf8feaa7", - "changeLog": [ - "Form View ve Form Edit ekranlarında Activity özelliği eklendi. 3 farklı Activity eklenebiliyor ayrıca dosya eklenebiliyor. Bu dosyalar diskte Blob olarak kaydediliyor." - ] - }, - { - "version": "1.0.31", - "buildDate": "2025-10-09", - "commit": "035366ab7020dd77bfe2b5b66ea253e743526ea6", - "changeLog": [ - "- Grid üzerinde Mask ve Format güncellemesi", - "- Allow Column Reordering uygulamasının çalıştırılması" - ] - }, - { - "version": "1.0.30", - "buildDate": "2025-10-08", - "commit": "e45885f5693176257e12ecc05d4ed51f87ef0120", - "changeLog": [ - "- Tenant ve Barch arasında ilişki kuruldu ve listelerde filtreli şekilde listeleniyor.", - "- Genel seederlar düzenlendi.", - "- Yeni tanımlamalar listeleri eklendi. Kayıt Tipi, Kayı Şekli, Program vs.", - "- Default Helper eklendi ve tüm Application Servisler o metoda yönlendirildi.", - "- Tanımlamalar menülere dağıtıldı." - ] - }, - { - "version": "1.0.29", - "buildDate": "2025-09-28", - "commit": "565357ba3e3f90811758b9b070e7e29e2c40b855", - "changeLog": [ - "Chart komponenti eklendi." - ] - }, - { - "version": "1.0.28", - "buildDate": "2025-09-24", - "commit": "948925816f3fc5808a07bf0ce6fd86e0ac880ec7", - "changeLog": [ - "Vite güncellemesi ile artık versiyon bilgileri düzelecek ve cache problemi düzelmeli" - ] - }, - { - "version": "1.0.27", - "buildDate": "2025-09-24", - "commit": "6e3f58ce9d3e7bc79c74dfc33ec79d115b7160a2", - "changeLog": [ - "FormView, FormNew, Grid Popup için Script özelliği eklendi. Ayrıca itemlara buton eklenebiliyor.", - "Sadece textbox olan inputlara ekleniyor. Diğer komponenler için render özelliği kullanılması gerekiyor." - ] - }, - { - "version": "1.0.26", - "buildDate": "2025-09-23", - "commit": "ea5dbe91f5abd0a7408b75cc111c3119fbb8eb53", - "changeLog": [ - "Liste, Pivot ve Card görünümü düzeltildi.", - "Menü ikonları Listelerde gösterildi.", - "Form detayında Subform filtreleri çalıştırıldı.", - "Grid proplarına gridDto gelmiyorsa kendi başının çaresine bakacak şekilde düzenlendi." - ] - }, - { - "version": "1.0.25", - "buildDate": "2025-09-23", - "commit": "d4f994b7b17bd96c45ed868e4c94d18ca757e217", - "changeLog": [ - "Genel düzenlemeler" - ] - }, - { - "version": "1.0.24", - "buildDate": "2025-09-23", - "commit": "f62c35dec957dae225ab93811a0899c975cecf52", - "changeLog": [ - "BaseModel LocalStorage açıldı.", - "ListeForm Layout ve CardColumnCount eklendi.", - "FormView, FormEdit ve FormNew den geri butonu ile Liste kaldığı yerden devam edebilecek." - ] - }, - { - "version": "1.0.23", - "buildDate": "2025-09-23", - "commit": "e92143fd055b9db1a8932f2c4d0b81172b19ef00", - "changeLog": [ - "Vite üzerinde html dosyaları cacheleme" - ] - }, - { - "version": "1.0.22", - "buildDate": "2025-09-23", - "commit": "226410e7a928a54f01dd7f5305bf09fb7dcbc59d", - "changeLog": [ - "MenuIcon için hook hazırladı. Liste, FormEdit, FormView ve FormNew de kullanılabilir." - ] - }, - { - "version": "1.0.21", - "buildDate": "2025-09-23", - "commit": "fcd6547dcb85d46d90d78eaa24788d7cc079d1b3", - "changeLog": [ - "Versiyon güncellemeleri sistemin son aşama; eğer versiyon bilgisi değişmiş ise ChangeLog sayfasına yönlendirildi." - ] - }, - { - "version": "1.0.19", - "buildDate": "2025-09-23", - "commit": "43a945969174dd50b798d0d619e5fb7932402d04", - "changeLog": [ - "Docker içerisinden diskclean script kaldırıldı. Ayrıca çalıştırılabilecek şekilde diskclean dizinin içerisinde sh dosyası mevcut." - ] - }, - { - "version": "1.0.18", - "buildDate": "2025-09-23", - "commit": "09566cce3b6750ad1f6ef2faad24b81d21dfd668", - "changeLog": [ - "\"build\": \"node scripts/generate-version.js && vite build\"", - "\"build:production\": \"vite build\",", - "Yukarıdaki şekilde hem developer hem de production ortamı build işlemi birbirinden ayrıldı." - ] - }, - { - "version": "1.0.17", - "buildDate": "2025-09-23", - "commit": "5456486692eb070601313ab439de9c33a977b15b", - "changeLog": [ - "Hem developer hem de production için versiyon güncellemesi" - ] - }, - { - "version": "1.0.16", - "buildDate": "2025-09-23", - "commit": "08799590e2e3dcee039e88370540c9224420d17f", - "changeLog": [ - "Genel versiyon düzeltmesi" - ] - }, - { - "version": "1.0.15", - "buildDate": "2025-09-23", - "commit": "08799590e2e3dcee039e88370540c9224420d17f", - "changeLog": [ - "Genel versiyon güncelleme hataları", - "- UI versiyon gösterilecek", - "- Deploy edilince otomatik sayfa tazelenecek" - ] - }, - { - "version": "1.0.14", - "buildDate": "2025-09-22", - "commit": "1c4ab4f8232b4cd2a39fa66f8101664840113ce5", - "changeLog": [ - "Yeni versiyon çıktı uyarı gelecek şekilde düzenlendi.", - "Sağ alt kısımda mesaj çıkacak ve yenile butonu ile uygulama yeni versiyona geçecektir." - ] - }, - { - "version": "1.0.13", - "buildDate": "2025-09-22", - "commit": "c5f3a65304bc3c04d89ddf2f01d02563c656b911", - "changeLog": [ - "nginx ayarları ve versiyon yenileme hakkında düzeltme" - ] - }, - { - "version": "1.0.12", - "buildDate": "2025-09-22", - "commit": "f55b777a171ec2072999e204b8e1e818fd91d8a3", - "changeLog": [ - "Versiyon yenileme sistemi güncellemesi" - ] - }, - { - "version": "1.0.11", - "buildDate": "2025-09-22", - "commit": "b2e489d7051ca47a82561cbf2674ec49dc30ed92", - "changeLog": [ - "Liste formlarda Layout görünümü düzenlemesi" - ] - }, - { - "version": "1.0.10", - "buildDate": "2025-09-22", - "commit": "b75158bc018b4d5076e0208796d68f16975e77d8", - "changeLog": [ - "EditorOptions içerisine DataSource özelliği eklendi" - ] - }, - { - "version": "1.0.9", - "buildDate": "2025-09-21", - "commit": "e14d6930c21d2b1c108f16ce675dd05474a95d9e", - "changeLog": [ - "Form komponentinin SelectBox -> lookup bilgisi varsa verileri dolduruyor" - ] - }, - { - "version": "1.0.8", - "buildDate": "2025-09-21", - "commit": "3f69cc54e94cf40db87fb23ba4cf7b311cc1f77c", - "changeLog": [ - "Listelere Grid ve Card görünümleri eklendi." - ] - }, - { - "version": "1.0.7", - "buildDate": "2025-09-20", - "commit": "a01422ca600fbcbdf3f51bb9c91ad7dba46c98a2", - "changeLog": [ - "Versiyon güncellemesi için geçiş uyarı sistemi" - ] - }, - { - "version": "1.0.6", - "buildDate": "2025-09-19", - "commit": "9e85780623d940f43155474b66f2820d997abe3a", - "changeLog": [ - "Versiyon güncelleme sistemi", - "Vite.Config dosyasında hızlandırma adına güncellemeler" - ] - }, - { - "version": "1.0.5", - "buildDate": "2025-09-19", - "commit": "c947fb2a1c0979df3d7fd4dab47af7a2d370f622", - "changeLog": [ - "Form ekranındaki Butonlar güncellemeleri yapıldı", - "Edit Form ekranındaki Info butonu eklendi.", - "New Form ekranındaki Geri butonu eklendi." - ] - }, - { - "version": "1.0.4", - "buildDate": "2025-09-19", - "commit": "6766d1129d345e165282fc3ec198a168f188ab00", - "changeLog": [ - "Subformlar üzerinde extra filters ve Widget çalışmaları yapıldı." - ] - }, - { - "version": "1.0.3", - "buildDate": "2025-09-19", - "commit": "656d1626179733f8da56aa2268b852a79efe26d8", - "changeLog": [ - "Manage Grid üzerinde Extra filtre tanımlaması yapıldı." - ] - }, - { - "version": "1.0.2", - "buildDate": "2025-09-16", - "commit": "c6d2fbf30acae9c96502dfdd3846cbfbaf8af614", - "changeLog": [ - "Genel Static olan Url bilgileri kaldırıldı." - ] - } - ] + "commit": "aac3f4a", + "releases": [] } \ No newline at end of file diff --git a/ui/src/components/classroom/KickParticipantModal.tsx b/ui/src/components/classroom/KickParticipantModal.tsx deleted file mode 100644 index 6c1d990..0000000 --- a/ui/src/components/classroom/KickParticipantModal.tsx +++ /dev/null @@ -1,82 +0,0 @@ -import React from 'react' -import { motion } from 'framer-motion' -import { FaUserTimes, FaExclamationTriangle } from 'react-icons/fa' - -interface KickParticipantModalProps { - participant: { id: string; name: string } | null - isOpen: boolean - onClose: () => void - onConfirm: (participantId: string, participantName: string) => void -} - -export const KickParticipantModal: React.FC = ({ - participant, - isOpen, - onClose, - onConfirm, -}) => { - if (!isOpen || !participant) return null - - const handleConfirm = () => { - onConfirm(participant.id, participant.name) - onClose() - } - - return ( -
- -
-
-
- -
-
-

Katılımcıyı Çıkar

-

Bu işlem geri alınamaz

-
-
- -
-

- "{participant.name}" adlı katılımcıyı sınıftan çıkarmak - istediğinizden emin misiniz? -

-
-
- -
-

Dikkat:

-
    -
  • Katılımcı anında sınıftan çıkarılacak
  • -
  • Tekrar katılım için davet gerekebilir
  • -
  • Katılım süresi kaydedilecek
  • -
-
-
-
-
- -
- - -
-
-
-
- ) -} diff --git a/ui/src/components/classroom/ParticipantGrid.tsx b/ui/src/components/classroom/ParticipantGrid.tsx deleted file mode 100644 index 55ab539..0000000 --- a/ui/src/components/classroom/ParticipantGrid.tsx +++ /dev/null @@ -1,282 +0,0 @@ -import React from 'react' -import { FaMicrophoneSlash, FaExpand, FaUserTimes } from 'react-icons/fa' -import { VideoPlayer } from './VideoPlayer' -import { ClassroomParticipantDto, VideoLayoutDto } from '@/proxy/classroom/models' - -interface ParticipantGridProps { - participants: ClassroomParticipantDto[] - localStream?: MediaStream | null - currentUserId: string - currentUserName: string - isTeacher: boolean - isAudioEnabled: boolean - isVideoEnabled: boolean - onToggleAudio: () => void - onToggleVideo: () => void - onLeaveCall: () => void - onMuteParticipant?: (participantId: string, isMuted: boolean, isTeacher: boolean) => void - layout: VideoLayoutDto - focusedParticipant?: string - onParticipantFocus?: (participantId: string | undefined) => void - onKickParticipant?: (participantId: string) => void - hasSidePanel?: boolean -} - -export const ParticipantGrid: React.FC = ({ - participants, - localStream, - currentUserId, - currentUserName, - isTeacher, - isAudioEnabled, - isVideoEnabled, - onToggleAudio, - onToggleVideo, - onLeaveCall, - onMuteParticipant, - layout, - focusedParticipant, - onParticipantFocus, - onKickParticipant, - hasSidePanel = false, -}) => { - // Only show current user's video once - const currentUserParticipant = { - id: currentUserId, - name: currentUserName, - isTeacher, - stream: localStream ?? undefined, // null yerine undefined - } as unknown as ClassroomParticipantDto - - // Eğer hiç katılımcı yoksa ve localStream de yoksa hiçbir şey render etme - if (!localStream && (!participants || participants.length === 0)) { - return null - } - - const allParticipants = [currentUserParticipant, ...participants] - - // Ortak ana video kutusu container class'ı - const mainVideoContainerClass = 'w-full h-full flex flex-col justify-center' - - const renderGridLayout = () => { - const getGridClass = (participantCount: number) => { - if (participantCount === 1) return 'grid-cols-1' - if (participantCount <= 2) return 'grid-cols-1 sm:grid-cols-2' - if (participantCount <= 4) return 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-2' - if (participantCount <= 6) return 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3' - if (participantCount <= 9) return 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3' - return 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-4' - } - - const getGridRows = (participantCount: number) => { - if (participantCount === 1) return 'grid-rows-1' - if (participantCount <= 2) return 'grid-rows-1 sm:grid-rows-1' - if (participantCount <= 4) return 'grid-rows-2 lg:grid-rows-2' - if (participantCount <= 6) return 'grid-rows-3 sm:grid-rows-2' - if (participantCount <= 9) return 'grid-rows-3' - return 'grid-rows-4 sm:grid-rows-3' - } - - const getPadding = (participantCount: number) => { - if (participantCount === 1) return '' - if (participantCount <= 4) return 'p-2 sm:p-4' - return 'p-1 sm:p-2' - } - - const getGap = (participantCount: number) => { - if (participantCount === 1) return 'gap-0' - if (participantCount <= 4) return 'gap-2 sm:gap-3' - return 'gap-1 sm:gap-2' - } - - // Mobilde: En üstte öğretmen, altında katılımcılar 2'li grid ve dikey scroll - const mainParticipant = allParticipants[0] - const otherParticipants = allParticipants.slice(1) - return ( - <> - {/* Mobil özel layout */} -
- {/* Ana katılımcı */} -
-
- {renderParticipant(mainParticipant, true)} -
-
- {/* Diğer katılımcılar 2'li grid ve dikey scroll */} - {otherParticipants.length > 0 && ( -
- {Array.from({ length: Math.ceil(otherParticipants.length / 2) }).map((_, rowIdx) => ( -
- {otherParticipants.slice(rowIdx * 2, rowIdx * 2 + 2).map((participant) => ( -
- {renderParticipant(participant, false, true)} -
- ))} - {otherParticipants.length % 2 === 1 && - rowIdx === Math.floor(otherParticipants.length / 2) ? ( -
- ) : null} -
- ))} -
- )} -
- {/* Masaüstü ve tablet için eski grid layout */} -
-
-
- {allParticipants.map((participant) => ( -
-
- {renderParticipant(participant, false)} -
-
- ))} -
-
-
- - ) - } - - const renderSidebarLayout = () => { - const mainParticipant = focusedParticipant - ? allParticipants.find((p) => p.id === focusedParticipant) || allParticipants[0] - : allParticipants[0] - const otherParticipants = allParticipants.filter((p) => p.id !== mainParticipant.id) - - const sidebarWidth = hasSidePanel - ? 'w-20 sm:w-24 md:w-32 lg:w-40' - : 'w-24 sm:w-32 md:w-40 lg:w-48' - - // Eğer hiç katılımcı yoksa, video player öğretmen odaklı gibi ortalanır ve geniş olur - return ( -
-
-
-
-
-
- {renderParticipant(mainParticipant, true)} -
-
-
- {otherParticipants.length > 0 && ( -
-
- {otherParticipants.map((participant) => ( -
- {renderParticipant(participant, false, true)} -
- ))} -
-
- )} -
-
-
- ) - } - - const renderTeacherFocusLayout = () => { - // Sadece öğretmen gösterilecek, katılımcılar asla gösterilmeyecek - const teacher = allParticipants.find((p) => p.isTeacher) || allParticipants[0] - return ( -
-
-
-
- {renderParticipant(teacher, true)} -
-
-
-
- ) - } - - const renderParticipant = ( - participant: ClassroomParticipantDto, - isMain: boolean = false, - isSmall: boolean = false, - ) => ( -
!isMain && onParticipantFocus?.(participant.id)} - style={{ minHeight: 0, minWidth: 0 }} - > -
- -
- {/* Teacher controls for students */} - {isTeacher && participant.id !== currentUserId && ( -
- - -
- )} -
- ) - - const renderLayout = () => { - switch (layout.type) { - case 'sidebar': - return renderSidebarLayout() - case 'teacher-focus': - return renderTeacherFocusLayout() - default: - return renderGridLayout() - } - } - - return
{renderLayout()}
-} diff --git a/ui/src/components/classroom/VideoPlayer.tsx b/ui/src/components/classroom/VideoPlayer.tsx deleted file mode 100644 index ad5e6c9..0000000 --- a/ui/src/components/classroom/VideoPlayer.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import React, { useRef, useEffect } from 'react' -import { FaMicrophoneSlash, FaVideoSlash } from 'react-icons/fa' - -const VideoOff: React.FC<{ size?: number; className?: string }> = ({ - size = 24, - className = '', -}) => - -interface VideoPlayerProps { - stream?: MediaStream - isLocal?: boolean - userName: string - isAudioEnabled?: boolean - isVideoEnabled?: boolean - onToggleAudio?: () => void - onToggleVideo?: () => void - onLeaveCall?: () => void -} - -export const VideoPlayer: React.FC = ({ - stream, - isLocal = false, - userName, - isAudioEnabled = true, - isVideoEnabled = true, -}) => { - const videoRef = useRef(null) - - useEffect(() => { - const videoEl = videoRef.current - if (!videoEl) return - - if (stream) { - videoEl.srcObject = stream - } else { - videoEl.srcObject = null - } - - return () => { - if (videoEl) { - videoEl.srcObject = null - } - } - }, [stream]) - - return ( -
- {/* Video sadece kamera açıkken göster */} -
- ) -} diff --git a/ui/src/components/classroom/data/classroom.ts b/ui/src/components/classroom/data/classroom.ts deleted file mode 100644 index 6ceffc9..0000000 --- a/ui/src/components/classroom/data/classroom.ts +++ /dev/null @@ -1,64 +0,0 @@ -import { Classroom } from '@/proxy/classroom/planning' - -export const classrooms: Classroom[] = [ - { - id: '1', - name: 'Theater Sınıfı', - layoutType: 'Theater', - rows: 6, - columns: 8, - capacity: 48, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '2', - name: 'U-Shape Sınıfı', - layoutType: 'UShape', - rows: 5, - columns: 8, - capacity: 40, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '3', - name: 'Bus Sınıfı', - layoutType: 'Bus', - rows: 10, - columns: 5, - capacity: 50, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '4', - name: 'Lab Sınıfı', - layoutType: 'Lab', - rows: 8, - columns: 6, - capacity: 48, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '5', - name: 'Exam Sınıfı', - layoutType: 'Exam', - rows: 10, - columns: 10, - capacity: 100, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '6', - name: 'Grid Sınıfı', - layoutType: 'Grid', - rows: 8, - columns: 8, - capacity: 64, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, -] diff --git a/ui/src/components/classroom/data/layouts.ts b/ui/src/components/classroom/data/layouts.ts deleted file mode 100644 index 2321f46..0000000 --- a/ui/src/components/classroom/data/layouts.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { - FaBookOpen, - FaBus, - FaCircle, - FaFlask, - FaLayerGroup, - FaSquare, - FaThLarge, -} from 'react-icons/fa' - -export const layouts = [ - { - value: 'Theater', - label: 'Theater', - icon: FaThLarge, - description: 'Tam grid düzen', - }, - { value: 'Bus', label: 'Bus', icon: FaBus, description: 'Ortada koridor' }, - { - value: 'UShape', - label: 'U-Shape', - icon: FaSquare, - description: 'U şekli düzen', - }, - { - value: 'Grid', - label: 'Grid', - icon: FaLayerGroup, - description: 'Basit tablo', - }, - { value: 'Lab', label: 'Lab', icon: FaFlask, description: 'Masa grupları' }, - { - value: 'Exam', - label: 'Exam', - icon: FaBookOpen, - description: 'Sınav düzeni', - }, - { - value: 'Circle', - label: 'Circle', - icon: FaCircle, - description: 'Yuvarlak düzen', - }, -] diff --git a/ui/src/components/classroom/data/students.ts b/ui/src/components/classroom/data/students.ts deleted file mode 100644 index 9af460b..0000000 --- a/ui/src/components/classroom/data/students.ts +++ /dev/null @@ -1,454 +0,0 @@ -import { Student } from '@/proxy/classroom/planning' - -export const mockStudents: Student[] = [ - { - id: '1', - fullName: 'Ahmet Yılmaz', - photoUrl: '/img/planning/1.jpg', - tags: ['Matematik', 'Fizik'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '2', - fullName: 'Ayşe Demir', - photoUrl: '/img/planning/2.jpg', - tags: ['Edebiyat', 'Tarih'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '3', - fullName: 'Mehmet Kaya', - photoUrl: '/img/planning/3.jpg', - tags: ['Kimya', 'Biyoloji'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '4', - fullName: 'Fatma Özkan', - photoUrl: '/img/planning/4.jpg', - tags: ['Geometri', 'Sanat'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '5', - fullName: 'Ali Çelik', - photoUrl: '/img/planning/5.jpg', - tags: ['İngilizce', 'Müzik'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '6', - fullName: 'Zeynep Arslan', - photoUrl: '/img/planning/6.jpg', - tags: ['Matematik', 'İngilizce'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '7', - fullName: 'Murat Doğan', - photoUrl: '/img/planning/7.jpg', - tags: ['Tarih', 'Coğrafya'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '8', - fullName: 'Elif Yıldız', - photoUrl: '/img/planning/8.jpg', - tags: ['Biyoloji', 'Edebiyat'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '9', - fullName: 'Osman Güler', - photoUrl: '/img/planning/9.jpg', - tags: ['Fizik', 'Kimya'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '10', - fullName: 'Hatice Aydın', - photoUrl: '/img/planning/10.jpg', - tags: ['Sanat', 'Müzik'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '11', - fullName: 'Emre Şahin', - photoUrl: '/img/planning/11.jpg', - tags: ['Matematik', 'Geometri'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '12', - fullName: 'Büşra Öztürk', - photoUrl: '/img/planning/12.jpg', - tags: ['İngilizce', 'Edebiyat'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '13', - fullName: 'Kemal Polat', - photoUrl: '/img/planning/13.jpg', - tags: ['Coğrafya', 'Tarih'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '14', - fullName: 'Selin Karaca', - photoUrl: '/img/planning/14.jpg', - tags: ['Biyoloji', 'Kimya'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '15', - fullName: 'Can Yavaş', - photoUrl: '/img/planning/15.jpg', - tags: ['Fizik', 'Matematik'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '16', - fullName: 'Deniz Mutlu', - photoUrl: '/img/planning/16.jpg', - tags: ['Müzik', 'Sanat'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '17', - fullName: 'Berk Koç', - photoUrl: '/img/planning/17.jpg', - tags: ['Geometri', 'Fizik'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '18', - fullName: 'Naz Aktaş', - photoUrl: '/img/planning/18.jpg', - tags: ['Edebiyat', 'İngilizce'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '19', - fullName: 'Arda Bulut', - photoUrl: '/img/planning/19.jpg', - tags: ['Tarih', 'Matematik'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '20', - fullName: 'İrem Tosun', - photoUrl: '/img/planning/20.jpg', - tags: ['Biyoloji', 'Sanat'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '21', - fullName: 'Kaan Erdoğan', - photoUrl: '/img/planning/21.jpg', - tags: ['Kimya', 'Coğrafya'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '22', - fullName: 'Lale Gündüz', - photoUrl: '/img/planning/22.jpg', - tags: ['Müzik', 'Edebiyat'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '23', - fullName: 'Rıza Özer', - photoUrl: '/img/planning/23.jpg', - tags: ['Fizik', 'Geometri'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '24', - fullName: 'Mine Akın', - photoUrl: '/img/planning/24.jpg', - tags: ['İngilizce', 'Tarih'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '25', - fullName: 'Tolga Şen', - photoUrl: '/img/planning/25.jpg', - tags: ['Matematik', 'Biyoloji'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '26', - fullName: 'Pınar Yıldırım', - photoUrl: '/img/planning/26.jpg', - tags: ['Sanat', 'Kimya'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '27', - fullName: 'Serkan Bozkurt', - photoUrl: '/img/planning/27.jpg', - tags: ['Coğrafya', 'Müzik'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '28', - fullName: 'Cansu Güven', - photoUrl: '/img/planning/28.jpg', - tags: ['Edebiyat', 'Fizik'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '29', - fullName: 'Barış Tekin', - photoUrl: '/img/planning/29.jpg', - tags: ['Matematik', 'Tarih'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '30', - fullName: 'Gizem Aslan', - photoUrl: '/img/planning/30.jpg', - tags: ['Biyoloji', 'İngilizce'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '31', - fullName: 'Cem Yılmaz', - photoUrl: '/img/planning/31.jpg', - tags: ['Fizik', 'Matematik'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '32', - fullName: 'Seda Kaya', - photoUrl: '/img/planning/32.jpg', - tags: ['Kimya', 'Biyoloji'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '33', - fullName: 'Burak Özkan', - photoUrl: '/img/planning/33.jpg', - tags: ['Tarih', 'Coğrafya'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '34', - fullName: 'Esra Demir', - photoUrl: '/img/planning/34.jpg', - tags: ['Edebiyat', 'Sanat'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '35', - fullName: 'Onur Çelik', - photoUrl: '/img/planning/35.jpg', - tags: ['İngilizce', 'Müzik'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '36', - fullName: 'Merve Arslan', - photoUrl: '/img/planning/36.jpg', - tags: ['Matematik', 'Geometri'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '37', - fullName: 'Hakan Doğan', - photoUrl: '/img/planning/37.jpg', - tags: ['Fizik', 'Kimya'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '38', - fullName: 'Aylin Yıldız', - photoUrl: '/img/planning/38.jpg', - tags: ['Biyoloji', 'Tarih'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '39', - fullName: 'Volkan Güler', - photoUrl: '/img/planning/39.jpg', - tags: ['Coğrafya', 'Edebiyat'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '40', - fullName: 'Sibel Aydın', - photoUrl: '/img/planning/40.jpg', - tags: ['Sanat', 'İngilizce'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '41', - fullName: 'Taner Şahin', - photoUrl: '/img/planning/41.jpg', - tags: ['Matematik', 'Müzik'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '42', - fullName: 'Gamze Öztürk', - photoUrl: '/img/planning/42.jpg', - tags: ['Fizik', 'Sanat'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '43', - fullName: 'Erhan Polat', - photoUrl: '/img/planning/43.jpg', - tags: ['Kimya', 'Geometri'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '44', - fullName: 'Dilek Karaca', - photoUrl: '/img/planning/44.jpg', - tags: ['Biyoloji', 'Edebiyat'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '45', - fullName: 'Mert Yavaş', - photoUrl: '/img/planning/45.jpg', - tags: ['Tarih', 'İngilizce'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '46', - fullName: 'Özge Mutlu', - photoUrl: '/img/planning/46.jpg', - tags: ['Coğrafya', 'Müzik'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '47', - fullName: 'Koray Koç', - photoUrl: '/img/planning/47.jpg', - tags: ['Matematik', 'Fizik'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '48', - fullName: 'Yeliz Aktaş', - photoUrl: '/img/planning/48.jpg', - tags: ['Sanat', 'Biyoloji'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '49', - fullName: 'Serdar Bulut', - photoUrl: '/img/planning/49.jpg', - tags: ['Kimya', 'Tarih'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, - { - id: '50', - fullName: 'Nilüfer Tosun', - photoUrl: '/img/planning/50.jpg', - tags: ['Edebiyat', 'Geometri'], - isActive: true, - creationTime: '2023-01-01T00:00:00Z', - lastModificationTime: '2023-01-01T00:00:00Z', - }, -] diff --git a/ui/src/components/classroom/panels/ChatPanel.tsx b/ui/src/components/classroom/panels/ChatPanel.tsx deleted file mode 100644 index 1698202..0000000 --- a/ui/src/components/classroom/panels/ChatPanel.tsx +++ /dev/null @@ -1,196 +0,0 @@ -import React, { useRef, useEffect } from 'react' -import { FaTimes, FaUsers, FaUser, FaBullhorn, FaPaperPlane } from 'react-icons/fa' -import { - ClassroomChatDto, - ClassroomParticipantDto, - ClassroomSettingsDto, - MessageType, -} from '@/proxy/classroom/models' - -interface ChatPanelProps { - user: { id: string; name: string; role: string } - participants: ClassroomParticipantDto[] - chatMessages: ClassroomChatDto[] - newMessage: string - setNewMessage: (msg: string) => void - messageMode: MessageType - setMessageMode: (mode: MessageType) => void - selectedRecipient: { id: string; name: string } | null - setSelectedRecipient: (recipient: { id: string; name: string } | null) => void - onSendMessage: (e: React.FormEvent) => void - onClose: () => void - formatTime: (timestamp: string) => string - classSettings: ClassroomSettingsDto -} - -const ChatPanel: React.FC = ({ - user, - participants, - chatMessages, - newMessage, - setNewMessage, - messageMode, - setMessageMode, - selectedRecipient, - setSelectedRecipient, - onSendMessage, - onClose, - formatTime, - classSettings, -}) => { - const messagesEndRef = useRef(null) - - useEffect(() => { - messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }) - }, [chatMessages]) - - const availableRecipients = participants.filter((p) => p.id !== user.id) - - return ( -
- {/* Header */} -
-

Sohbet

- -
- - {/* Mesaj Modu */} -
-
- - - {classSettings.allowPrivateMessages && ( - - )} - {user.role === 'teacher' && ( - - )} -
- - {messageMode === 'private' && ( - - )} -
- - {/* Mesaj Listesi */} -
- {chatMessages.length === 0 ? ( -
Henüz mesaj yok.
- ) : ( - chatMessages.map((m) => ( -
-
- {m.senderId !== user.id && ( -
- {m.senderName} - {m.isTeacher && ' (Öğretmen)'} -
- )} -
{m.message}
-
{formatTime(m.timestamp)}
-
-
- )) - )} -
-
- - {/* Mesaj Gönderme */} -
-
- setNewMessage(e.target.value)} - placeholder="Mesaj yaz..." - className="flex-1 px-3 py-2 border border-gray-300 rounded-lg text-sm" - /> - -
-
-
- ) -} - -export default ChatPanel diff --git a/ui/src/components/classroom/panels/DocumentsPanel.tsx b/ui/src/components/classroom/panels/DocumentsPanel.tsx deleted file mode 100644 index ed91bf8..0000000 --- a/ui/src/components/classroom/panels/DocumentsPanel.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import React, { useRef, useState } from 'react' -import { FaTimes, FaFile, FaEye, FaDownload, FaTrash } from 'react-icons/fa' -import { ClassDocumentDto } from '@/proxy/classroom/models' - -interface DocumentsPanelProps { - user: { role: string; name: string } - documents: ClassDocumentDto[] - onUpload: (file: File) => void - onDelete: (id: string) => void - onView: (doc: ClassDocumentDto) => void - onClose: () => void - formatFileSize: (bytes: number) => string - getFileIcon: (type: string) => JSX.Element -} - -const DocumentsPanel: React.FC = ({ - user, - documents, - onUpload, - onDelete, - onView, - onClose, - formatFileSize, - getFileIcon, -}) => { - const fileInputRef = useRef(null) - const [dragOver, setDragOver] = useState(false) - - const handleDrop = (e: React.DragEvent) => { - e.preventDefault() - setDragOver(false) - if (user.role !== 'teacher') return - const files = Array.from(e.dataTransfer.files) - files.forEach((file) => onUpload(file)) - } - - const handleFileSelect = (e: React.ChangeEvent) => { - if (user.role !== 'teacher') return - const files = Array.from(e.target.files || []) - files.forEach((file) => onUpload(file)) - if (fileInputRef.current) fileInputRef.current.value = '' - } - - return ( -
- {/* Header */} -
-
-

Sınıf Dokümanları

- -
-
- - {/* Content */} -
- {/* Upload Area (Teacher Only) */} - {user.role === 'teacher' && ( -
{ - e.preventDefault() - setDragOver(true) - }} - onDragLeave={() => setDragOver(false)} - > - -

Doküman Yükle

-

Dosyaları buraya sürükleyin veya seçin

- - -
- )} - - {/* Documents List */} - {documents.length === 0 ? ( -
- -

Henüz doküman yüklenmemiş.

-
- ) : ( -
- {documents.map((doc) => ( -
-
-
{getFileIcon(doc.type)}
-
-

{doc.name}

-

- {formatFileSize(doc.size)} •{' '} - {new Date(doc.uploadedAt).toLocaleDateString('tr-TR')} -

-

{doc.uploadedBy}

-
-
- -
- - - - - - - {user.role === 'teacher' && ( - - )} -
-
- ))} -
- )} -
-
- ) -} - -export default DocumentsPanel diff --git a/ui/src/components/classroom/panels/LayoutPanel.tsx b/ui/src/components/classroom/panels/LayoutPanel.tsx deleted file mode 100644 index d81e994..0000000 --- a/ui/src/components/classroom/panels/LayoutPanel.tsx +++ /dev/null @@ -1,112 +0,0 @@ -import React from 'react' -import { FaTimes, FaTh, FaExpand, FaDesktop, FaUsers } from 'react-icons/fa' -import { VideoLayoutDto } from '@/proxy/classroom/models' - -interface LayoutPanelProps { - layouts: VideoLayoutDto[] - currentLayout: VideoLayoutDto - onChangeLayout: (layout: VideoLayoutDto) => void - onClose: () => void -} - -const getLayoutIcon = (type: string) => { - switch (type) { - case 'grid': - return - case 'speaker': - return - case 'presentation': - return - case 'sidebar': - return - case 'teacher-focus': - return - default: - return - } -} - -const LayoutPanel: React.FC = ({ - layouts, - currentLayout, - onChangeLayout, - onClose, -}) => { - return ( -
-
-
-

Video Layout Seçin

- -
-
- -
-
- {layouts.map((layout) => ( - - ))} -
-
-
- ) -} - -export default LayoutPanel diff --git a/ui/src/components/classroom/panels/ParticipantsPanel.tsx b/ui/src/components/classroom/panels/ParticipantsPanel.tsx deleted file mode 100644 index f914e17..0000000 --- a/ui/src/components/classroom/panels/ParticipantsPanel.tsx +++ /dev/null @@ -1,227 +0,0 @@ -import React, { useState } from 'react' -import { - FaTimes, - FaUsers, - FaClipboardList, - FaHandPaper, - FaCheck, - FaMicrophone, - FaMicrophoneSlash, - FaVideoSlash, - FaUserTimes, -} from 'react-icons/fa' -import { ClassroomParticipantDto, ClassroomAttendanceDto } from '@/proxy/classroom/models' - -interface ParticipantsPanelProps { - user: { id: string; name: string; role: string } - participants: ClassroomParticipantDto[] - attendanceRecords: ClassroomAttendanceDto[] - onMuteParticipant: (participantId: string, isMuted: boolean, isTeacher: boolean) => void - onKickParticipant: (participantId: string, participantName: string) => void - onApproveHandRaise: (participantId: string) => void - onDismissHandRaise: (participantId: string) => void - onClose: () => void - formatTime: (timestamp: string) => string - formatDuration: (minutes: number) => string -} - -const ParticipantsPanel: React.FC = ({ - user, - participants, - attendanceRecords, - onMuteParticipant, - onKickParticipant, - onClose, - onApproveHandRaise, - onDismissHandRaise, - formatTime, - formatDuration, -}) => { - const [activeTab, setActiveTab] = useState<'participants' | 'attendance'>('participants') - - // El kaldıranları bul - const handRaised = participants.filter((p) => p.isHandRaised) - - return ( -
- {/* Header */} -
-
-

- Katılımcılar ({participants.length + 1}) -

- -
- - {/* El kaldıranlar göstergesi */} - {user.role === 'teacher' && handRaised.length > 0 && ( -
- - - {handRaised.length} kişi el kaldırdı: - - - {handRaised.map((p) => p.name).join(', ')} - -
- )} - - {/* Tab Navigation */} -
- - - {user.role === 'teacher' && ( - - )} -
-
- - {/* Participants Tab */} - {activeTab === 'participants' && ( -
-
- {/* Current User */} -
-
-
- {user.name.charAt(0)} -
- {user.name} (Siz) -
- {user.role === 'teacher' && ( - - Öğretmen - - )} -
- - {/* Other Participants */} - {participants.map((participant) => ( -
-
-
- {participant.name.charAt(0)} -
- {participant.name} - - {/* Hand Raise Indicator & Teacher Control */} - {participant.isHandRaised && - (user.role === 'teacher' && !participant.isTeacher ? ( - - ) : ( - - ))} -
- -
- {/* Hand Raise Controls kaldırıldı, kontrol yukarıya taşındı */} - - {/* Mute / Unmute Button */} - {user.role === 'teacher' && !participant.isTeacher && ( - - )} - - {/* Video muted indicator */} - {participant.isVideoMuted && } - - {participant.isTeacher && ( - - Öğretmen - - )} - - {/* Kick Button (Teacher Only) */} - {user.role === 'teacher' && !participant.isTeacher && ( - - )} -
-
- ))} -
-
- )} - - {/* Attendance Tab */} - {activeTab === 'attendance' && ( -
- {attendanceRecords.length === 0 ? ( -
- -

Henüz katılım kaydı bulunmamaktadır.

-
- ) : ( -
- {attendanceRecords.map((record) => ( -
-
-

{record.studentName}

- - {formatDuration(record.totalDurationMinutes)} - -
-
-
Giriş: {formatTime(record.joinTime)}
-
- Çıkış: {record.leaveTime ? formatTime(record.leaveTime) : 'Devam ediyor'} -
-
-
- ))} -
- )} -
- )} -
- ) -} - -export default ParticipantsPanel diff --git a/ui/src/components/classroom/panels/ScreenSharePanel.tsx b/ui/src/components/classroom/panels/ScreenSharePanel.tsx deleted file mode 100644 index b371857..0000000 --- a/ui/src/components/classroom/panels/ScreenSharePanel.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; -import { FaDesktop, FaStop, FaPlay } from 'react-icons/fa'; - -interface ScreenSharePanelProps { - isSharing: boolean; - onStartShare: () => void; - onStopShare: () => void; - sharedScreen?: MediaStream; - sharerName?: string; -} - -export const ScreenSharePanel: React.FC = ({ - isSharing, - onStartShare, - onStopShare, - sharedScreen, - sharerName, -}) => { - return ( -
-
-
- -

Ekran Paylaşımı

-
- - {isSharing ? ( - - ) : ( - - )} -
- - {sharedScreen && ( -
-
- )} - - {isSharing && !sharedScreen && ( -
- -

Ekran paylaşımı başlatılıyor...

-
- )} -
- ); -}; \ No newline at end of file diff --git a/ui/src/components/classroom/planning/ClassroomSelector.tsx b/ui/src/components/classroom/planning/ClassroomSelector.tsx deleted file mode 100644 index cafcc89..0000000 --- a/ui/src/components/classroom/planning/ClassroomSelector.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { Classroom } from '@/proxy/classroom/planning' -import React from 'react' -import { classrooms } from '../data/classroom' - -interface ClassroomSelectorProps { - selectedClassroom: Classroom | null - onClassroomChange: (classroom: Classroom | null) => void -} - -export const ClassroomSelector: React.FC = ({ - selectedClassroom, - onClassroomChange, -}) => { - return ( -
- -
- ) -} diff --git a/ui/src/components/classroom/planning/QuickActions.tsx b/ui/src/components/classroom/planning/QuickActions.tsx deleted file mode 100644 index 5a41066..0000000 --- a/ui/src/components/classroom/planning/QuickActions.tsx +++ /dev/null @@ -1,145 +0,0 @@ -import React from 'react' -import { Card } from '@/components/ui/Card' -import { Button } from '@/components/ui/Button' -import { Avatar } from '@/components/ui/Avatar' -import { FaPhone, FaEnvelope, FaRegCommentDots, FaUserTimes } from 'react-icons/fa' -import { Seat, Student } from '@/proxy/classroom/planning' - -interface QuickActionsProps { - selectedSeats: string[] - seats: Seat[] - students: Student[] - onRemoveSelectedStudents: () => void - onToggleSeatBlock: () => void -} - -export const QuickActions: React.FC = ({ - selectedSeats, - seats, - students, - onRemoveSelectedStudents, -}) => { - const selectedStudents = selectedSeats - .map((seatId) => { - const seat = seats.find((s) => s.id === seatId) - return seat?.studentId ? students.find((s) => s.id === seat.studentId) : null - }) - .filter(Boolean) as Student[] - - return ( -
- {/* Statistics */} - İstatistikler} - headerClass="p-2" - > -
-
- Toplam koltuk: - {seats.length} -
-
- Dolu koltuk: - - {seats.filter((s) => s.studentId).length} - -
-
- Boş koltuk: - - {seats.filter((s) => !s.studentId && !s.isBlocked).length} - -
-
-
- Doluluk oranı: - - {Math.round((seats.filter((s) => s.studentId).length / seats.length) * 100)}% - -
-
-
-
- - {/* Selection Info */} - Seçilen Koltuk ({selectedStudents.length})} - headerClass="p-2" - > -
- {/* Quick Actions */} - {selectedStudents.length > 0 && ( - -
- {selectedStudents.length > 0 && ( - <> - - - - - )} - - {selectedSeats.length > 0 && ( - <> - - - )} -
-
- )} - - {/* Selected Students */} - {selectedStudents.length > 0 && ( - -
- {selectedStudents.map((student) => ( -
- -
-
{student.fullName}
-
-
- ))} -
-
- )} -
-
-
- ) -} diff --git a/ui/src/components/classroom/planning/SeatGrid.tsx b/ui/src/components/classroom/planning/SeatGrid.tsx deleted file mode 100644 index fd9ebc0..0000000 --- a/ui/src/components/classroom/planning/SeatGrid.tsx +++ /dev/null @@ -1,186 +0,0 @@ -import React from 'react' -import { useDroppable } from '@dnd-kit/core' -import { Avatar } from '@/components/ui/Avatar' -import { FaTimes } from 'react-icons/fa' -import { Seat, SeatGridProps, Student } from '@/proxy/classroom/planning' - -const DroppableSeat: React.FC<{ - seat: Seat - student?: Student - isSelected: boolean - onSelect: () => void - onRemoveStudent: () => void -}> = ({ seat, student, isSelected, onSelect, onRemoveStudent }) => { - const { isOver, setNodeRef } = useDroppable({ - id: seat.id, - }) - - const isEmpty = !student - const isBlocked = seat.isBlocked - const canDrop = !isBlocked // Bloke olmayan tüm koltuklar drop edilebilir - const canSelect = !isEmpty // Sadece dolu koltuklar seçilebilir - - return ( -
-
- {student ? ( - - {student.fullName - .split(' ') - .map((n) => n[0]) - .join('')} - - ) : ( - - {seat.label} - - )} - - {/* Drop indicator */} - {isOver && canDrop && isEmpty && ( -
- )} - - {/* Drop indicator for occupied seats */} - {isOver && canDrop && !isEmpty && ( -
- )} - - {/* Invalid drop indicator */} - {isOver && !canDrop && ( -
- )} -
- - {/* Remove button - sadece dolu koltuklar için */} - {student && ( - - )} - - {/* Tooltip on hover */} - {student && ( -
- {student.fullName} -
- )} -
- ) -} - -export const SeatGrid: React.FC = ({ - classroom, - seats, - students, - selectedSeats, - onSeatSelect, - onRemoveStudent, -}) => { - const handleSeatSelect = (seatId: string) => { - if (selectedSeats.includes(seatId)) { - onSeatSelect(selectedSeats.filter((id) => id !== seatId)) - } else { - onSeatSelect([...selectedSeats, seatId]) - } - } - - // Create grid layout - const grid = Array.from({ length: classroom.rows }, (_, row) => - Array.from({ length: classroom.columns }, (_, col) => { - const seat = seats.find((s) => s.row === row && s.col === col) - const student = seat?.studentId ? students.find((s) => s.id === seat.studentId) : undefined - return { seat, student } - }), - ) - - return ( -
-
-
TAHTA
-
- - {/* Seat Grid */} -
- {grid.flat().map(({ seat, student }, index) => { - if (!seat) return
- - return ( - handleSeatSelect(seat.id)} - onRemoveStudent={() => onRemoveStudent(seat.id)} - /> - ) - })} -
- - {/* Legend */} -
-
-
- Boş -
-
-
- Dolu -
-
-
- ) -} diff --git a/ui/src/components/classroom/planning/StudentList.tsx b/ui/src/components/classroom/planning/StudentList.tsx deleted file mode 100644 index ad7393e..0000000 --- a/ui/src/components/classroom/planning/StudentList.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import React from 'react' -import { useDraggable } from '@dnd-kit/core' -import { Avatar } from '@/components/ui/Avatar' -import { Student, StudentListProps } from '@/proxy/classroom/planning' - -const DraggableStudent: React.FC<{ student: Student }> = ({ student }) => { - const { attributes, listeners, setNodeRef, transform, isDragging } = useDraggable({ - id: student.id, - }) - - const style = transform - ? { - transform: `translate3d(${transform.x}px, ${transform.y}px, 0)`, - } - : undefined - - return ( -
-
- - {student.fullName - .split(' ') - .map((n) => n[0]) - .join('')} - - -
-
- {student.fullName} -
-
-
-
- ) -} - -export const StudentList: React.FC = ({ students }) => { - return ( -
-
- {students.length === 0 ? ( -
-
Öğrenci bulunamadı
-
Arama kriterlerinizi değiştirin
-
- ) : ( - students.map((student) => ) - )} -
-
- ) -} diff --git a/ui/src/proxy/classroom/models.ts b/ui/src/proxy/classroom/models.ts deleted file mode 100644 index 1d60dbc..0000000 --- a/ui/src/proxy/classroom/models.ts +++ /dev/null @@ -1,137 +0,0 @@ -import { PagedAndSortedResultRequestDto } from '../abp' - -export type RoleState = 'role-selection' | 'dashboard' | 'classroom' - -export type Role = 'teacher' | 'student' | 'observer' - -export type MessageType = 'public' | 'private' | 'announcement' - -export type VideoLayoutType = 'grid' | 'sidebar' | 'teacher-focus' - -export interface User { - id: string - name: string - email: string - role: Role -} - -export interface ClassroomDto { - id: string - name: string - description?: string - subject?: string - teacherId: string - teacherName: string - scheduledStartTime: string - scheduledEndTime: string - duration?: number - actualStartTime?: string - actualEndTime?: string - maxParticipants?: number - participantCount: number - settingsDto?: ClassroomSettingsDto -} - -export interface ClassroomSettingsDto { - allowHandRaise: boolean - allowStudentChat: boolean - allowPrivateMessages: boolean - allowStudentScreenShare: boolean - defaultMicrophoneState: 'muted' | 'unmuted' - defaultCameraState: 'on' | 'off' - defaultLayout: string - autoMuteNewParticipants: boolean -} - -export interface ClassroomAttendanceDto { - id: string - sessionId: string - studentId: string - studentName: string - joinTime: string - leaveTime?: string - totalDurationMinutes: number -} - -export interface ClassroomParticipantDto { - id: string - name: string - sessionId: string - isTeacher: boolean - isObserver?: boolean - isAudioMuted?: boolean - isVideoMuted?: boolean - isHandRaised?: boolean - isKicked?: boolean - isActive?: boolean - stream?: MediaStream - screenStream?: MediaStream - isScreenSharing?: boolean - peerConnection?: RTCPeerConnection -} - - -export interface ClassroomChatDto { - id: string - sessionId: string - senderId: string - senderName: string - message: string - timestamp: string - isTeacher: boolean - recipientId?: string - recipientName?: string - messageType: MessageType -} - -export interface VideoLayoutDto { - id: string - name: string - type: VideoLayoutType - description: string -} - -export interface TeacherLayoutDto extends VideoLayoutDto { - id: 'teacher-focus' - name: 'Öğretmen Odaklı' - type: 'teacher-focus' - description: 'Öğretmen tam ekranda, öğrenciler küçük panelde' -} - -export interface ScheduledClassDto { - id: string - name: string - scheduledTime: string - duration: number -} - -export interface HandRaiseDto { - id: string - studentId: string - studentName: string - timestamp: string - isActive: boolean -} - -export interface ClassDocumentDto { - id: string - name: string - url: string - type: string - size: number - uploadedAt: string - uploadedBy: string - isPresentation?: boolean - totalPages?: number -} - -export interface ScreenShareRequestDto { - userId: string - userName: string - isActive: boolean -} - -export interface ClassroomFilterInputDto extends PagedAndSortedResultRequestDto { - search: string - status: string -} diff --git a/ui/src/proxy/classroom/planning.ts b/ui/src/proxy/classroom/planning.ts deleted file mode 100644 index 4f977b0..0000000 --- a/ui/src/proxy/classroom/planning.ts +++ /dev/null @@ -1,123 +0,0 @@ -export interface Student { - id: string - fullName: string - photoUrl: string | null - tags: string[] - isActive: boolean - creationTime: string - lastModificationTime: string -} - -export interface SeatGridProps { - classroom: Classroom - seats: Seat[] - students: Student[] - selectedSeats: string[] - onSeatSelect: (seatIds: string[]) => void - onRemoveStudent: (seatId: string) => void -} - -export interface StudentListProps { - students: Student[] - searchQuery: string - selectedTags: string[] -} - -export interface Seat { - id: string - row: number - col: number - label: string - isBlocked: boolean - studentId?: string - seatType: SeatType - concurrencyStamp: string - creationTime: string - lastModificationTime: string -} - -export interface Classroom { - id: string - name: string - layoutType: string - rows: number - columns: number - capacity: number - creationTime: string - lastModificationTime: string -} - -export interface StudentQuery { - q?: string - tags?: string[] - page?: number - size?: number - isActive?: boolean -} - -// Classroom types -export type LayoutType = 'Theater' | 'Bus' | 'UShape' | 'Grid' | 'Lab' | 'Exam' | 'Circle' -export type SeatType = 'Standard' | 'Table' | 'Wheelchair' -export type AssignmentStrategy = 'FillByOrder' | 'MatchByIndex' - -export interface SeatAssignment { - id: string - classroomId: string - seatId: string - studentId: string - assignedAt: string - assignedBy: string -} - -export interface SeatMap { - classroom: Classroom - seats: Seat[] - assignments: SeatAssignment[] -} - -// Assignment operations -export interface AssignSingleDto { - seatId: string - studentId: string -} - -export interface AssignBulkDto { - seatIds: string[] - studentIds: string[] - strategy: AssignmentStrategy -} - -export interface AssignmentResult { - success: boolean - assignedCount: number - errors?: string[] -} - -// Real-time events -export interface SseEvent { - id: string - event: string - data: any - timestamp: string -} - -export interface SeatAssignedEvent { - classroomId: string - seatId: string - studentId: string - ts: string - id: string -} - -export interface SeatUnassignedEvent { - classroomId: string - seatId: string - ts: string - id: string -} - -export interface LayoutChangedEvent { - classroomId: string - ts: string - id: string -} diff --git a/ui/src/proxy/intranet/models.ts b/ui/src/proxy/intranet/models.ts deleted file mode 100644 index daf7c62..0000000 --- a/ui/src/proxy/intranet/models.ts +++ /dev/null @@ -1,469 +0,0 @@ -import { - Address, - EmployeeStatusEnum, - EmploymentTypeEnum, - GenderEnum, - HrCostCenter, - HrDisciplinaryAction, - HrEmergencyContact, - HrPerformanceEvaluation, - HrTraining, - HrWorkSchedule, - JobLevelEnum, - LeaveStatusEnum, - LeaveTypeEnum, - MaritalStatusEnum, -} from '@/types/hr' -import { PriorityEnum } from '@/types/intranet' - -export interface IntranetDashboardDto { - events: EventDto[] - birthdays: EmployeeDto[] - visitors: VisitorDto[] - reservations: ReservationDto[] - trainings: TrainingDto[] - expenses: ExpensesDto - documents: DocumentDto[] - announcements: AnnouncementDto[] - shuttleRoutes: ShuttleRouteDto[] - meals: MealDto[] - leaves: LeaveDto[] - overtimes: OvertimeDto[] - surveys: SurveyDto[] - socialPosts: SocialPostDto[] - tasks: ProjectTaskDto[] -} - -// Etkinlik -export interface EventDto { - id: string - categoryName: string - typeName: string - date: Date - name: string - description: string - place: string - organizer: EmployeeDto - participants: number - photos: string[] - comments: EventCommentDto[] - likes: number - isPublished: boolean -} - -// Etkinlik Yorumu -export interface EventCommentDto { - id: string - employee: EmployeeDto - content: string - creationTime: Date - likes: number -} - -export enum BankAccountTypeEnum { - Current = 'CURRENT', // Vadesiz - Deposit = 'DEPOSIT', // Vadeli - Credit = 'CREDIT', // Kredi - Foreign = 'FOREIGN', // Yabancı Para -} - -// Bank Management Types -export interface BankAccount { - // Banka Hesabı - id: string - accountCode: string - bankName: string - branchName: string - accountNumber: string - iban: string - accountType: BankAccountTypeEnum - currency: string - balance: number - overdraftLimit: number - dailyTransferLimit: number - isActive: boolean - contactPerson?: string - phoneNumber?: string - swiftCode?: string - isDefault: boolean - creationTime: Date - lastModificationTime: Date -} - -export interface EmployeeDto { - // İnsan Kaynakları Çalışanı - id: string - code: string - firstName: string - lastName: string - name: string - email: string - phoneNumber?: string - mobileNumber?: string - avatar?: string - nationalId: string - birthDate: Date - gender: GenderEnum - maritalStatus: MaritalStatusEnum - address: Address - emergencyContact: HrEmergencyContact - hireDate: Date - terminationDate?: Date - employmentType: EmploymentTypeEnum - jobPositionId: string - jobPosition?: JobPositionDto - departmentId: string - department?: DepartmentDto - managerId?: string - manager?: EmployeeDto - baseSalary: number - currency: string - payrollGroup: string - bankAccountId: string - bankAccount?: BankAccount - workLocation: string - workSchedule?: HrWorkSchedule - badgeNumber?: string - employeeStatus: EmployeeStatusEnum - isActive: boolean - leaves: LeaveDto[] - evaluations: HrPerformanceEvaluation[] - trainings: HrTraining[] - disciplinaryActions: HrDisciplinaryAction[] - creationTime: Date - lastModificationTime: Date -} - -export interface DepartmentDto { - // İnsan Kaynakları Departmanı - id: string - name: string - description?: string - parentDepartmentId?: string - parentDepartment?: DepartmentDto - subDepartments: DepartmentDto[] - managerId?: string - manager?: EmployeeDto - costCenterId?: string - costCenter?: HrCostCenter - budget: number - isActive: boolean - creationTime: Date - lastModificationTime: Date -} - -export interface JobPositionDto { - // İnsan Kaynakları İş Pozisyonu - id: string - name: string - description?: string - departmentId: string - department?: DepartmentDto - level: JobLevelEnum - minSalary: number - maxSalary: number - currency: string - requiredSkills: string[] - responsibilities: string[] - qualifications: string[] - isActive: boolean - employees: EmployeeDto[] - creationTime: Date - lastModificationTime: Date -} - -// Ziyaretçi -export interface VisitorDto { - id: string - name: string - companyName: string - email: string - phoneNumber: string - purpose: string - visitDate: Date - checkIn?: Date - checkOut?: Date - employeeId: string - employee: EmployeeDto - status: 'Planlandı' | 'Giriş' | 'Çıkış' | 'İptal Edildi' - badgeNumber?: string - photo?: string -} - -// Rezervasyon -export interface ReservationDto { - id: string - type: 'room' | 'vehicle' | 'equipment' - resourceName: string - bookedBy: EmployeeDto - startDate: Date - endDate: Date - purpose: string - status: 'pending' | 'approved' | 'rejected' | 'completed' - participants?: number - notes?: string -} - -// Eğitim -export interface TrainingDto { - id: string - title: string - description: string - instructor: string - category: 'technical' | 'soft-skills' | 'management' | 'compliance' | 'other' - type: 'online' | 'classroom' | 'hybrid' - duration: number // saat - startDate: Date - endDate: Date - maxParticipants: number - enrolled: number - status: 'upcoming' | 'ongoing' | 'completed' - location?: string - thumbnail?: string -} - -// Harcama -export interface ExpensesDto { - totalRequested: number - totalApproved: number - last5Expenses: ExpenseDto[] -} - -// Harcama -export interface ExpenseDto { - id: string - employee: EmployeeDto - category: 'travel' | 'meal' | 'accommodation' | 'transport' | 'other' - amount: number - currency: string - date: Date - description: string - project?: string - receipts: { name: string; url: string; size: string }[] - status: 'pending' | 'approved' | 'rejected' - approver?: EmployeeDto - approvalDate?: Date - notes?: string - creationTime: Date -} - -// Doküman (FileItemDto ile uyumlu) -export interface DocumentDto { - id: string - name: string - type: string // "file" or "folder" - size: number - extension: string - mimeType: string - createdAt: Date - modifiedAt: Date - path: string - parentId: string - isReadOnly: boolean - childCount: number -} - -// Sertifika -export interface CertificateDto { - id: string - employee: EmployeeDto - trainingTitle: string - issueDate: Date - expiryDate?: Date - certificateUrl: string - score?: number -} - -// Duyuru -export interface AnnouncementDto { - id: string - title: string - excerpt: string - content: string - imageUrl?: string - category: string - employeeId: string - employee: EmployeeDto - publishDate: Date - expiryDate?: Date - isPinned: boolean - viewCount: number - departments?: string[] - attachments?: { name: string; url: string; size: string }[] -} - -// Servis -export interface ShuttleRouteDto { - id: string - name: string - route: string[] - departureTime: string - arrivalTime: string - capacity: number - available: number - type: string -} - -// Yemek Menüsü -export interface MealDto { - id: string - branchId: string - date: Date - type: 'breakfast' | 'lunch' | 'dinner' - totalCalorie?: number - materials: string[] -} - -// İnsan Kaynakları Fazla Mesai -export interface ProjectTaskDto { - id: string - - name: string - description: string - - priority: PriorityEnum - status?: string - - employeeId?: string - employee: EmployeeDto - - startDate: Date - endDate: Date - - progress: number - isActive: boolean -} - -// İnsan Kaynakları Fazla Mesai -export interface OvertimeDto { - id: string - employeeId: string - employee?: EmployeeDto - date: Date - startTime: string - endTime: string - totalHours: number - reason: string - status: LeaveStatusEnum - approvedBy?: string - approver?: EmployeeDto - rate?: number - amount?: number - creationTime: Date - lastModificationTime: Date -} - -// İnsan Kaynakları İzni -export interface LeaveDto { - id: string - employeeId: string - employee?: EmployeeDto - leaveType: LeaveTypeEnum - startDate: Date - endDate: Date - totalDays: number - reason?: string - status: LeaveStatusEnum - appliedDate: Date - approvedBy?: string - approvedDate?: Date - rejectionReason?: string - isHalfDay: boolean - attachments: string[] - creationTime: Date - lastModificationTime: Date -} - -// Anket Cevap -export interface SurveyAnswerDto { - questionId: string - questionType: 'rating' | 'multiple-choice' | 'text' | 'textarea' | 'yes-no' - value: string | number | string[] -} - -// Sosyal Duvar - Comment Interface -export interface SocialCommentDto { - id: string - creator: EmployeeDto - content: string - creationTime: Date -} - -export interface SocialPollOptionDto { - id: string - text: string - votes: number -} - -// Sosyal Duvar - Social Media Interface -export interface SocialMediaDto { - id?: string - type: 'image' | 'video' | 'poll' - - // Ortak alanlar - urls?: string[] - - // Anket (poll) ile ilgili alanlar doğrudan burada - pollQuestion?: string - pollOptions?: SocialPollOptionDto[] - pollTotalVotes?: number - pollEndsAt?: Date - pollUserVoteId?: string -} - -// Sosyal Duvar - Ana Interface -export interface SocialPostDto { - id: string - employee: EmployeeDto - content: string - locationJson?: string - media?: SocialMediaDto - likeCount: number - isLiked: boolean - likeUsers: EmployeeDto[] - comments: SocialCommentDto[] - isOwnPost: boolean - creationTime: Date -} - -// Anket Cevabı -export interface SurveyResponseDto { - id: string - surveyId: string - respondentId?: string // Anonymous ise null - submissionTime: Date - answers: SurveyAnswerDto[] -} - -// Anket Sorusu Seçeneği -export interface SurveyQuestionOptionDto { - id: string - text: string - order: number -} - -// Anket Sorusu -export interface SurveyQuestionDto { - id: string - surveyId: string - questionText: string - type: 'rating' | 'multiple-choice' | 'text' | 'textarea' | 'yes-no' - order: number - isRequired: boolean - options?: SurveyQuestionOptionDto[] -} - -// Anket -export interface SurveyDto { - id: string - title: string - description: string - creatorId: EmployeeDto - creationTime: Date - deadline: Date - questions: SurveyQuestionDto[] - responses: number - targetAudience: string[] - status: 'draft' | 'active' | 'closed' - isAnonymous: boolean -} diff --git a/ui/src/proxy/intranet/utils.tsx b/ui/src/proxy/intranet/utils.tsx deleted file mode 100644 index 32daf9f..0000000 --- a/ui/src/proxy/intranet/utils.tsx +++ /dev/null @@ -1,69 +0,0 @@ -import { - FaFileAlt, - FaFilePdf, - FaFileWord, - FaFileExcel, - FaFilePowerpoint, - FaFileImage, - FaFileArchive, - FaFileCode, -} from 'react-icons/fa' - -export const getFileIcon = (extension: string) => { - switch (extension.toLowerCase()) { - case '.pdf': - return - case '.doc': - case '.docx': - return - case '.xls': - case '.xlsx': - return - case '.ppt': - case '.pptx': - return - case '.jpg': - case '.jpeg': - case '.png': - case '.gif': - return - case '.zip': - case '.rar': - return - case '.txt': - return - default: - return - } -} - -export const getFileType = (extension: string) => { - switch (extension.toLowerCase()) { - case '.pdf': - return '📄 PDF' - case '.doc': - case '.docx': - return '📝 Word' - case '.xls': - case '.xlsx': - return '📊 Excel' - case '.ppt': - case '.pptx': - return '📽️ PowerPoint' - case '.jpg': - case '.jpeg': - return '🖼️ JPEG' - case '.png': - return '🖼️ PNG' - case '.gif': - return '🖼️ GIF' - case '.zip': - return '🗜️ ZIP' - case '.rar': - return '🗜️ RAR' - case '.txt': - return '📝 Text' - default: - return '📄 Dosya' - } -} \ No newline at end of file diff --git a/ui/src/services/intranet.service.ts b/ui/src/services/intranet.service.ts deleted file mode 100644 index 959bbeb..0000000 --- a/ui/src/services/intranet.service.ts +++ /dev/null @@ -1,17 +0,0 @@ -import apiService, { Config } from './api.service' -import { IntranetDashboardDto } from '@/proxy/intranet/models' - -export class IntranetService { - apiName = 'Default' - - getDashboard = (config?: Partial) => - apiService.fetchData( - { - method: 'GET', - url: '/api/app/intranet/intranet-dashboard', - }, - { apiName: this.apiName, ...config }, - ) -} - -export const intranetService = new IntranetService() diff --git a/ui/src/views/coordinator/Assignments.tsx b/ui/src/views/coordinator/Assignments.tsx deleted file mode 100644 index 48fd2ca..0000000 --- a/ui/src/views/coordinator/Assignments.tsx +++ /dev/null @@ -1,250 +0,0 @@ -import React, { useState } from 'react' -import { - FaPlus, - FaSearch, - FaFilter, - FaEdit, - FaTrash, - FaClock, - FaUsers, - FaCalendar, - FaPlay, -} from 'react-icons/fa' -import { useNavigate } from 'react-router-dom' -import { generateMockExam } from '@/mocks/mockExams' -import { generateMockPools } from '@/mocks/mockPools' -import { Exam, QuestionPoolDto } from '@/types/coordinator' -import { ExamCreator } from './ExamInterface/ExamCreator' -import { ROUTES_ENUM } from '@/routes/route.constant' - -const Assignments: React.FC = () => { - const navigate = useNavigate() - const [assignments, setAssignments] = useState(generateMockExam()) - const [pools] = useState(generateMockPools()) - const [searchTerm, setSearchTerm] = useState('') - const [statusFilter, setStatusFilter] = useState('') - const [isCreating, setIsCreating] = useState(false) - const [editingAssignment, setEditingAssignment] = useState(null) - - const assignmentList = assignments.filter((assignment) => assignment.type === 'assignment') - - const filteredAssignments = assignmentList.filter((assignment) => { - const matchesSearch = - assignment.title.toLowerCase().includes(searchTerm.toLowerCase()) || - assignment.description.toLowerCase().includes(searchTerm.toLowerCase()) - const matchesStatus = - !statusFilter || - (statusFilter === 'active' && assignment.isActive) || - (statusFilter === 'inactive' && !assignment.isActive) - return matchesSearch && matchesStatus - }) - - const handleCreateAssignment = ( - assignmentData: Omit, - ) => { - const newAssignment: Exam = { - ...assignmentData, - type: 'assignment', - id: `assignment-${Date.now()}`, - creationTime: new Date(), - lastModificationTime: new Date(), - } - setAssignments((prev) => [...prev, newAssignment]) - setIsCreating(false) - } - - const handleUpdateAssignment = ( - assignmentData: Omit, - ) => { - if (editingAssignment) { - const updatedAssignment: Exam = { - ...assignmentData, - id: editingAssignment.id, - creationTime: editingAssignment.creationTime, - lastModificationTime: new Date(), - } - setAssignments((prev) => - prev.map((a) => (a.id === updatedAssignment.id ? updatedAssignment : a)), - ) - setEditingAssignment(null) - setIsCreating(false) - } - } - - const handleEdit = (assignment: Exam) => { - setEditingAssignment(assignment) - setIsCreating(true) - } - - const handleCancel = () => { - setIsCreating(false) - setEditingAssignment(null) - } - - if (isCreating) { - return ( - - ) - } - - return ( -
- {/* Header */} -
-
-

Ödev Yönetimi

-

Ödevleri oluşturun ve yönetin

-
- - -
- - {/* Filters */} -
-
-
- - setSearchTerm(e.target.value)} - className="pl-8 text-sm w-full border border-gray-300 rounded-lg px-2 py-1 focus:outline-none focus:ring-2 focus:ring-blue-500" - /> -
- -
- - -
- -
- Toplam: {filteredAssignments.length} ödev -
-
-
- - {/* Assignments List */} -
- {filteredAssignments.length > 0 ? ( - filteredAssignments.map((assignment) => ( -
-
-
-
-

{assignment.title}

- - {assignment.isActive ? 'Aktif' : 'Pasif'} - -
- -

{assignment.description}

- -
-
- - {assignment.timeLimit} dakika -
- -
- - {assignment.questions.length} soru -
- -
- - Toplam: {assignment.totalPoints} puan -
- -
- Geçme: %{assignment.passingScore} -
-
- - {assignment.startTime && assignment.endTime && ( -
-
- Başlangıç: {assignment.startTime.toLocaleString('tr-TR')} - - Bitiş: {assignment.endTime.toLocaleString('tr-TR')} -
-
- )} -
- -
- - - -
-
-
- )) - ) : ( -
-
- -
-

Ödev bulunamadı

-

- {searchTerm || statusFilter - ? 'Arama kriterlerinizi değiştirin veya yeni ödev oluşturun.' - : 'İlk ödevinizi oluşturun.'} -

-
- )} -
-
- ) -} - -export default Assignments diff --git a/ui/src/views/coordinator/Classroom/ClassList.tsx b/ui/src/views/coordinator/Classroom/ClassList.tsx deleted file mode 100644 index 1ea6fc9..0000000 --- a/ui/src/views/coordinator/Classroom/ClassList.tsx +++ /dev/null @@ -1,919 +0,0 @@ -import React, { useEffect, useState } from 'react' -import { showDbDateAsIs } from '@/utils/dateUtils' -import { useNavigate } from 'react-router-dom' -import { motion } from 'framer-motion' -import { - FaPlus, - FaCalendarAlt, - FaClock, - FaUsers, - FaPlay, - FaEdit, - FaTrash, - FaEye, - FaHourglassEnd, - FaDoorOpen, - FaSearch, - FaFilter, -} from 'react-icons/fa' - -import { ClassroomDto } from '@/proxy/classroom/models' -import { useStoreState } from '@/store/store' -import { ROUTES_ENUM } from '@/routes/route.constant' -import { Container } from '@/components/shared' -import { - createClassroom, - deleteClassroom, - getClassrooms, - startClassroom, - updateClassroom, -} from '@/services/classroom.service' -import { Helmet } from 'react-helmet' -import { useLocalization } from '@/utils/hooks/useLocalization' -import { APP_NAME } from '@/constants/app.constant' - -export interface ClassProps { - status: string - className: string - showButtons: boolean - title: string - classes: string - event?: () => void -} - -const ClassList: React.FC = () => { - const navigate = useNavigate() - const { user } = useStoreState((state) => state.auth) - const { translate } = useLocalization() - - const newClassEntity: ClassroomDto = { - id: crypto.randomUUID(), - name: '', - description: '', - subject: '', - teacherId: user.id, - teacherName: user.name, - scheduledStartTime: '', - scheduledEndTime: '', - duration: 60, - maxParticipants: 30, - participantCount: 0, - settingsDto: { - allowHandRaise: true, - allowStudentChat: true, - allowPrivateMessages: true, - allowStudentScreenShare: false, - defaultMicrophoneState: 'muted', - defaultCameraState: 'on', - defaultLayout: 'grid', - autoMuteNewParticipants: true, - }, - } - const [classList, setClassList] = useState([]) - const [classroom, setClassroom] = useState(newClassEntity) - - const [showCreateModal, setShowCreateModal] = useState(false) - const [showEditModal, setShowEditModal] = useState(false) - const [showDeleteModal, setShowDeleteModal] = useState(false) - - // Filter/search state - const [searchTerm, setSearchTerm] = useState('') - const [statusFilter, setStatusFilter] = useState('') - - const getClassroomList = async ( - skipCount = 0, - maxResultCount = 1000, - sorting = '', - search = '', - status = '', - ) => { - try { - const result = await getClassrooms({ - sorting, - skipCount, - maxResultCount, - search, - status, - }) - - const items = (result.data.items || []).map((item) => ({ - ...item, - scheduledStartTime: item.scheduledStartTime - ? showDbDateAsIs(item.scheduledStartTime) - : null, - actualStartTime: item.actualStartTime ? showDbDateAsIs(item.actualStartTime) : null, - })) as ClassroomDto[] - - setClassList(items) - } catch (error) { - console.error('Error fetching classrooms:', error) - } - } - - useEffect(() => { - getClassroomList(0, 1000, '', searchTerm, statusFilter) - }, [searchTerm, statusFilter]) - - const handleCreateClass = async (e: React.FormEvent) => { - e.preventDefault() - - try { - await createClassroom(classroom) - - getClassroomList() - setShowCreateModal(false) - setClassroom(newClassEntity) - } catch (error) { - console.error('Sınıf oluştururken hata oluştu:', error) - } - } - - const handleEditClass = async (e: React.FormEvent) => { - e.preventDefault() - if (!classroom) return - - try { - await updateClassroom(classroom) - - getClassroomList() - setShowEditModal(false) - setClassroom(newClassEntity) - resetForm() - } catch (error) { - console.error('Sınıf oluştururken hata oluştu:', error) - } - } - - const openEditModal = (classSession: ClassroomDto) => { - setClassroom(classSession) - setShowEditModal(true) - } - - const openDeleteModal = (classSession: ClassroomDto) => { - setClassroom(classSession) - setShowDeleteModal(true) - } - - const handleDeleteClass = async () => { - if (!classroom) return - - try { - await deleteClassroom(classroom.id!) - getClassroomList() - setShowDeleteModal(false) - setClassroom(newClassEntity) - } catch (error) { - console.error('Sınıf silinirken hata oluştu:', error) - } - } - - const resetForm = () => { - setClassroom(newClassEntity) - } - - const handleStartClass = async (classSession: ClassroomDto) => { - await startClassroom(classSession.id!) - getClassroomList() - - handleJoinClass(classSession) - } - - const handleJoinClass = (classSession: ClassroomDto) => { - if (classSession.id) { - navigate(ROUTES_ENUM.protected.coordinator.classroom.roomDetail.replace(':id', classSession.id)) - } - } - - const handlePlanningClass = (classSession: ClassroomDto) => { - if (classSession.id) { - navigate(ROUTES_ENUM.protected.coordinator.classroom.planning.replace(':id', classSession.id)) - } - } - - const widgets = () => { - return { - totalCount: classList.length, - activeCount: classList.filter((c) => !c.actualStartTime && !c.actualEndTime).length, - openCount: classList.filter( - (c) => c.actualStartTime && !c.actualEndTime, // && canJoinClass(c.actualStartTime), - ).length, - passiveCount: classList.filter((c) => c.actualStartTime && c.actualEndTime).length, - } - } - - const getClassProps = (classSession: ClassroomDto): ClassProps => { - //Aktif -> boş boş - if (!classSession.actualStartTime && !classSession.actualEndTime) { - return { - status: 'Aktif', - className: 'bg-blue-100 text-blue-800', - showButtons: true, - title: - user.role === 'teacher' && classSession.teacherId === user.id ? 'Dersi Başlat' : 'Katıl', - classes: - user.role === 'teacher' && classSession.teacherId === user.id - ? 'bg-green-600 text-white hover:bg-green-700' - : 'bg-blue-600 text-white hover:bg-blue-700', - event: () => { - user.role === 'teacher' && classSession.teacherId === user.id - ? handleStartClass(classSession) - : handleJoinClass(classSession) - }, - } - } - - //Katılıma Açık -> dolu boş - if ( - classSession.actualStartTime && - !classSession.actualEndTime - //&& canJoinClass(classSession.actualStartTime) - ) { - return { - status: 'Katılım Açık', - className: 'bg-yellow-100 text-yellow-800', - showButtons: true, - title: - user.role === 'teacher' && classSession.teacherId === user.id ? 'Sınıfa Git' : 'Katıl', - classes: - user.role === 'teacher' && classSession.teacherId === user.id - ? 'bg-green-600 text-white hover:bg-green-700' - : 'bg-blue-600 text-white hover:bg-blue-700', - event: () => { - handleJoinClass(classSession) - }, - } - } - - //Pasif - return { - status: 'Pasif', - className: 'bg-gray-100 text-gray-800', - showButtons: false, - title: '', - classes: '', - event: () => {}, - } - } - - return ( - <> - - - {/* Stats Cards */} -
- -
-
- -
-
-

Toplam Sınıf

-

- {widgets().totalCount}{' '} -

-
-
-
- - {/* Aktif Sınıf */} - -
-
- -
-
-

Aktif Sınıf

-

- {widgets().activeCount} -

-
-
-
- - {/* Katılıma Açık */} - -
-
- -
-
-

Katılıma Açık

-

{widgets().openCount}

-
-
-
- - {/* Pasif Sınıf */} - -
-
- -
-
-

Pasif Sınıf

-

- {widgets().passiveCount} -

-
-
-
- - {/* Toplam Katılımcı */} - -
-
- -
-
-

Toplam Katılımcı

-

- {classList.reduce((sum, c) => sum + c.participantCount, 0)} -

-
-
-
-
- - {/* Filter Bar */} -
-
-
- - setSearchTerm(e.target.value)} - /> -
-
- - -
-
-
- - {/* Scheduled Classes */} -
-
-

Programlı Sınıflar

- {user.role === 'teacher' && ( - - )} -
-
- {classList.length === 0 ? ( -
- -

Henüz programlanmış sınıf bulunmamaktadır.

-
- ) : ( -
- {classList.map((classSession, index) => { - const { status, className, showButtons, title, classes, event } = - getClassProps(classSession) - return ( - -
-
-

- {classSession.name} -

- - {status} - -
- - {/* Sağ kısım: buton */} - {showButtons && ( -
- {/* {user.role === 'teacher' && classSession.teacherId === user.id && ( */} - {user.role === 'teacher' && ( - <> - - - - - - - )} - - -
- )} -
- -
-

{classSession.subject}

-
- -
- - {classSession.description} - -
- -
-
-
- - - {showDbDateAsIs(classSession.scheduledStartTime)} - -
- -
- - {classSession.duration} dakika -
- -
- {classSession.scheduledEndTime && ( - <> - - - {showDbDateAsIs(classSession.scheduledEndTime!)} - - - )} -
- -
- - - {classSession.participantCount}/{classSession.maxParticipants} - -
-
-
-
- ) - })} -
- )} -
-
- - {/* Class Modal (Create/Edit) */} - {(showCreateModal || (showEditModal && classroom)) && ( -
- -
-

- {showCreateModal ? 'Yeni Sınıf Oluştur' : 'Sınıfı Düzenle'} -

-
- -
-
- - setClassroom({ ...classroom, name: e.target.value })} - className="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent" - placeholder="Örn: Matematik 101 - Diferansiyel Denklemler" - /> -
- -
- -