diff --git a/Application/Cqrs/Faculty/Queries/GetFacultyDetails/FacultyInfoVm.cs b/Application/Cqrs/Faculty/Queries/GetFacultyDetails/FacultyInfoVm.cs
new file mode 100644
index 0000000..f7fb805
--- /dev/null
+++ b/Application/Cqrs/Faculty/Queries/GetFacultyDetails/FacultyInfoVm.cs
@@ -0,0 +1,32 @@
+namespace Mirea.Api.DataAccess.Application.Cqrs.Faculty.Queries.GetFacultyDetails;
+
+///
+/// Represents faculties.
+///
+public class FacultyInfoVm
+{
+ ///
+ /// The unique identifier for the faculty.
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// The name of the faculty.
+ ///
+ public required string Name { get; set; }
+
+ ///
+ /// ID indicating the faculty's affiliation to the campus.
+ ///
+ public int? CampusId { get; set; }
+
+ ///
+ /// Campus name indicating the faculty's affiliation to the campus.
+ ///
+ public string? CampusName { get; set; }
+
+ ///
+ /// Campus code indicating the faculty's affiliation to the campus.
+ ///
+ public string? CampusCode { get; set; }
+}
\ No newline at end of file
diff --git a/Application/Cqrs/Faculty/Queries/GetFacultyDetails/GetFacultyInfoQuery.cs b/Application/Cqrs/Faculty/Queries/GetFacultyDetails/GetFacultyInfoQuery.cs
new file mode 100644
index 0000000..2517b14
--- /dev/null
+++ b/Application/Cqrs/Faculty/Queries/GetFacultyDetails/GetFacultyInfoQuery.cs
@@ -0,0 +1,8 @@
+using MediatR;
+
+namespace Mirea.Api.DataAccess.Application.Cqrs.Faculty.Queries.GetFacultyDetails;
+
+public class GetFacultyInfoQuery : IRequest
+{
+ public required int Id { get; set; }
+}
\ No newline at end of file
diff --git a/Application/Cqrs/Faculty/Queries/GetFacultyDetails/GetFacultyInfoQueryHandler.cs b/Application/Cqrs/Faculty/Queries/GetFacultyDetails/GetFacultyInfoQueryHandler.cs
new file mode 100644
index 0000000..a2f6486
--- /dev/null
+++ b/Application/Cqrs/Faculty/Queries/GetFacultyDetails/GetFacultyInfoQueryHandler.cs
@@ -0,0 +1,27 @@
+using MediatR;
+using Microsoft.EntityFrameworkCore;
+using Mirea.Api.DataAccess.Application.Common.Exceptions;
+using Mirea.Api.DataAccess.Application.Interfaces.DbContexts.Schedule;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Mirea.Api.DataAccess.Application.Cqrs.Faculty.Queries.GetFacultyDetails;
+
+public class GetFacultyInfoQueryHandler(IFacultyDbContext dbContext) : IRequestHandler
+{
+ public async Task Handle(GetFacultyInfoQuery request, CancellationToken cancellationToken)
+ {
+ var faculty = await dbContext.Faculties
+ .Include(f => f.Campus)
+ .FirstOrDefaultAsync(f => f.Id == request.Id, cancellationToken) ?? throw new NotFoundException(typeof(Domain.Schedule.Faculty), request.Id);
+
+ return new FacultyInfoVm()
+ {
+ Id = faculty.Id,
+ Name = faculty.Name,
+ CampusId = faculty.CampusId,
+ CampusName = faculty.Campus?.FullName,
+ CampusCode = faculty.Campus?.CodeName
+ };
+ }
+}
\ No newline at end of file
diff --git a/Application/Cqrs/Faculty/Queries/GetFacultyList/FacultyListVm.cs b/Application/Cqrs/Faculty/Queries/GetFacultyList/FacultyListVm.cs
new file mode 100644
index 0000000..8ad7d4b
--- /dev/null
+++ b/Application/Cqrs/Faculty/Queries/GetFacultyList/FacultyListVm.cs
@@ -0,0 +1,14 @@
+using System.Collections.Generic;
+
+namespace Mirea.Api.DataAccess.Application.Cqrs.Faculty.Queries.GetFacultyList;
+
+///
+/// Represents a view model containing multiple faculties.
+///
+public class FacultyListVm
+{
+ ///
+ /// The list of faculties.
+ ///
+ public IList Faculties { get; set; } = new List();
+}
\ No newline at end of file
diff --git a/Application/Cqrs/Faculty/Queries/GetFacultyList/FacultyLookupDto.cs b/Application/Cqrs/Faculty/Queries/GetFacultyList/FacultyLookupDto.cs
new file mode 100644
index 0000000..7a8c615
--- /dev/null
+++ b/Application/Cqrs/Faculty/Queries/GetFacultyList/FacultyLookupDto.cs
@@ -0,0 +1,22 @@
+namespace Mirea.Api.DataAccess.Application.Cqrs.Faculty.Queries.GetFacultyList;
+
+///
+/// Represents faculties.
+///
+public class FacultyLookupDto
+{
+ ///
+ /// The unique identifier for the faculty.
+ ///
+ public int Id { get; set; }
+
+ ///
+ /// The name of the faculty.
+ ///
+ public required string Name { get; set; }
+
+ ///
+ /// ID indicating the faculty's affiliation to the campus.
+ ///
+ public int? CampusId { get; set; }
+}
\ No newline at end of file
diff --git a/Application/Cqrs/Faculty/Queries/GetFacultyList/GetFacultyListQuery.cs b/Application/Cqrs/Faculty/Queries/GetFacultyList/GetFacultyListQuery.cs
new file mode 100644
index 0000000..9abe675
--- /dev/null
+++ b/Application/Cqrs/Faculty/Queries/GetFacultyList/GetFacultyListQuery.cs
@@ -0,0 +1,9 @@
+using MediatR;
+
+namespace Mirea.Api.DataAccess.Application.Cqrs.Faculty.Queries.GetFacultyList;
+
+public class GetFacultyListQuery : IRequest
+{
+ public int? Page { get; set; }
+ public int? PageSize { get; set; }
+}
\ No newline at end of file
diff --git a/Application/Cqrs/Faculty/Queries/GetFacultyList/GetFacultyListQueryHandler.cs b/Application/Cqrs/Faculty/Queries/GetFacultyList/GetFacultyListQueryHandler.cs
new file mode 100644
index 0000000..1249fe7
--- /dev/null
+++ b/Application/Cqrs/Faculty/Queries/GetFacultyList/GetFacultyListQueryHandler.cs
@@ -0,0 +1,31 @@
+using MediatR;
+using Microsoft.EntityFrameworkCore;
+using Mirea.Api.DataAccess.Application.Interfaces.DbContexts.Schedule;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Mirea.Api.DataAccess.Application.Cqrs.Faculty.Queries.GetFacultyList;
+
+public class GetFacultyListQueryHandler(IFacultyDbContext dbContext) : IRequestHandler
+{
+ public async Task Handle(GetFacultyListQuery request, CancellationToken cancellationToken)
+ {
+ var dtos = dbContext.Faculties.OrderBy(f => f.Id).Select(f => new FacultyLookupDto()
+ {
+ Id = f.Id,
+ Name = f.Name,
+ CampusId = f.CampusId
+ });
+
+ if (request is { PageSize: not null, Page: not null })
+ dtos = dtos.Skip(request.Page.Value * request.PageSize.Value).Take(request.PageSize.Value);
+
+ var result = await dtos.ToListAsync(cancellationToken);
+
+ return new FacultyListVm
+ {
+ Faculties = result
+ };
+ }
+}
\ No newline at end of file