diff --git a/src/controllers/premium-album-controller.ts b/src/controllers/premium-album-controller.ts
index 36595e5d942e933b415c570af386d4097468b6a6..651b430fb65dd6c134e0c4373cf80ed57fd86d08 100644
--- a/src/controllers/premium-album-controller.ts
+++ b/src/controllers/premium-album-controller.ts
@@ -37,6 +37,22 @@ const createPremiumAlbum = async (
   }
 };
 
+const getPremiumAlbumById = async (
+  req: Request,
+  res: Response,
+  next: NextFunction,
+): Promise<void> => {
+  try {
+    const premiumAlbumId = Number(req.params.premiumAlbumId);
+    const responseData = await PremiumAlbumService.getPremiumAlbumById(
+      premiumAlbumId,
+    );
+    generateResponse(res, StatusCodes.OK, responseData);
+  } catch (err) {
+    next(err);
+  }
+}
+
 const searchPremiumAlbum = async (
   req: Request,
   res: Response,
@@ -56,6 +72,29 @@ const searchPremiumAlbum = async (
   }
 };
 
+const searchPremiumAlbumOwned = async (
+    req: Request,
+    res: Response,
+    next: NextFunction,
+): Promise<void> => {
+    try {
+        const allPremiumAlbum = await PremiumAlbumService.searchPremiumAlbumOwned(
+            {
+                size: req.query.size ? Number(req.query.size) : undefined,
+                page: req.query.page ? Number(req.query.page) : undefined,
+                searchQuery: req.query.searchQuery ? String(req.query.searchQuery) : undefined,
+                premiumAlbumIds: JSON.parse(<string>req.query.premiumAlbumIds, (key, value) => {
+                    if (key === "") return value;
+                    return typeof value === "string" ? Number(value) : value;
+                }),
+            },
+        );
+        generateResponse(res, StatusCodes.OK, allPremiumAlbum);
+    } catch (err) {
+        next(err);
+    }
+}
+
 const updatePremiumAlbum = async (
   req: Request,
   res: Response,
@@ -120,7 +159,9 @@ const deletePremiumAlbum = async (
 
 export {
   createPremiumAlbum,
+  getPremiumAlbumById,
   searchPremiumAlbum,
+  searchPremiumAlbumOwned,
   updatePremiumAlbum,
   deletePremiumAlbum,
 };
diff --git a/src/services/premium-album-service.ts b/src/services/premium-album-service.ts
index 740cfa4f6c3301d47eca841d2c96ae84746d1d24..2b0701b15601e05699fcb131d682286b514fe6b6 100644
--- a/src/services/premium-album-service.ts
+++ b/src/services/premium-album-service.ts
@@ -4,7 +4,7 @@ import {ErrorType, StandardError} from "../errors/standard-error";
 import {validate} from "../validation/validation";
 import {
   createPremiumAlbumSchema,
-  deletePremiumAlbumSchema,
+  deletePremiumAlbumSchema, searchPremiumAlbumOwnSchema,
   searchPremiumAlbumSchema,
   updatePremiumAlbumSchema
 } from "../validation/premium-album-validation";
@@ -25,6 +25,34 @@ const createPremiumAlbum = async (
   });
 };
 
+const getPremiumAlbumById = async (
+  premiumAlbumId: number,
+): Promise<{ data: PremiumAlbum, duration: number }> => {
+  const album = await prismaClient.premiumAlbum.findUnique({
+    where: {
+      albumId: premiumAlbumId,
+    },
+  });
+
+  if (!album) {
+    throw new StandardError(ErrorType.ALBUM_NOT_FOUND);
+  }
+
+  const albumDuration = await prismaClient.premiumSong.aggregate({
+    where: {
+      albumId: premiumAlbumId
+    },
+    _sum: {
+      duration: true
+    }
+  })
+
+  return {
+    data : album,
+    duration: albumDuration._sum.duration ?? 0
+  };
+};
+
 const searchPremiumAlbum = async (reqQuery: {
   size: number | undefined;
   page: number | undefined;
@@ -77,6 +105,79 @@ const searchPremiumAlbum = async (reqQuery: {
   };
 };
 
+const searchPremiumAlbumOwned = async (reqQuery: {
+  size: number | undefined;
+  page: number | undefined;
+  searchQuery: string | undefined;
+  premiumAlbumIds : number[]
+}) => {
+  validate(searchPremiumAlbumOwnSchema, reqQuery)
+
+  const skip: number = ((reqQuery.page ?? 1) - 1) * (reqQuery.size ?? 10);
+
+  const filters = [];
+
+  if (reqQuery.searchQuery) {
+    filters.push({
+      OR: [
+        {
+          albumName: {
+            contains: reqQuery.searchQuery,
+          },
+        },
+        {
+          artist: {
+            contains: reqQuery.searchQuery,
+          },
+        },
+      ],
+    });
+  }
+
+
+  const albums = await prismaClient.premiumAlbum.findMany({
+    where: {
+      AND: [
+        {
+          albumId: {
+            in: reqQuery.premiumAlbumIds
+          }
+        },
+        {
+          AND: filters,
+        }
+      ]
+    },
+    take: reqQuery.size ?? 10,
+    skip: skip,
+  });
+
+  const totalAlbums = await prismaClient.premiumAlbum.count({
+    where: {
+        AND: [
+            {
+            albumId: {
+                in: reqQuery.premiumAlbumIds
+            }
+            },
+            {
+            AND: filters,
+            }
+        ]
+    },
+  });
+
+  return {
+    data: albums,
+    paging: {
+      page: reqQuery.page ?? 1,
+      totalAlbums: totalAlbums,
+      totalPages: Math.ceil(totalAlbums / (reqQuery.size ?? 10)),
+    },
+  };
+};
+
+
 const updatePremiumAlbum = async (
   inputData: Prisma.PremiumAlbumUpdateInput,
   premiumAlbumId: number,
@@ -125,7 +226,9 @@ const deletePremiumAlbum = async (
 
 export {
   createPremiumAlbum,
+  getPremiumAlbumById,
   searchPremiumAlbum,
+  searchPremiumAlbumOwned,
   updatePremiumAlbum,
   deletePremiumAlbum,
 };
diff --git a/src/validation/premium-album-validation.ts b/src/validation/premium-album-validation.ts
index c4945bcea9bf17112c648bcef084f8937098931c..173ac5d8bfb77908e81f1b41643224c0549f9474 100644
--- a/src/validation/premium-album-validation.ts
+++ b/src/validation/premium-album-validation.ts
@@ -13,6 +13,13 @@ const searchPremiumAlbumSchema = z.object({
     searchQuery: z.optional(z.string().min(1).max(255)),
 });
 
+const searchPremiumAlbumOwnSchema = z.object({
+    size: z.optional(z.number().int().min(10).max(100)),
+    page: z.optional(z.number().int().min(1)),
+    searchQuery: z.optional(z.string().min(1).max(255)),
+    premiumAlbumIds : z.array(z.number().int().min(1)),
+});
+
 const updatePremiumAlbumSchema = z.object({
     premiumAlbumId: z.number().int().min(1),
     albumName: z.optional(z.string().min(1).max(255)),
@@ -28,6 +35,7 @@ const deletePremiumAlbumSchema = z.object({
 export {
     createPremiumAlbumSchema,
     searchPremiumAlbumSchema,
+    searchPremiumAlbumOwnSchema,
     updatePremiumAlbumSchema,
     deletePremiumAlbumSchema,
 }