diff --git a/front/pages/org/[orgslug]/collections/index.tsx b/front/pages/org/[orgslug]/collections/index.tsx
index d3c911e7..ce8f7700 100644
--- a/front/pages/org/[orgslug]/collections/index.tsx
+++ b/front/pages/org/[orgslug]/collections/index.tsx
@@ -6,6 +6,7 @@ import styled from "styled-components";
import { Title } from "../../../../components/UI/Elements/Styles/Title";
import { deleteCollection, getOrgCollections } from "../../../../services/collections";
import { getOrganizationContextInfo } from "../../../../services/orgs";
+import { getBackendUrl } from "../../../../services/config";
function Collections() {
const router = useRouter();
@@ -48,6 +49,13 @@ function Collections() {
{collections.map((collection: any) => (
{collection.name}
+
+ {collection.courses.map((course: any) => (
+
+
+
+ ))}
+
))}
@@ -59,7 +67,7 @@ function Collections() {
const CollectionItem = styled.div`
display: flex;
- flex-direction: column;
+ flex-direction: row;
place-items: center;
width: 100%;
height: 100%;
@@ -75,4 +83,19 @@ const CollectionItem = styled.div`
}
`;
+const CourseMiniThumbnail = styled.div`
+ display: flex;
+ flex-direction: row;
+ img {
+ width: 20px;
+ height: 20px;
+ border-radius: 5px;
+ margin: 5px;
+ transition: all 0.2s ease-in-out;
+ }
+
+ &:hover {
+ opacity: 0.8;
+ }
+`;
export default Collections;
diff --git a/front/pages/org/[orgslug]/courses/index.tsx b/front/pages/org/[orgslug]/courses/index.tsx
index fb862feb..7e35c9a4 100644
--- a/front/pages/org/[orgslug]/courses/index.tsx
+++ b/front/pages/org/[orgslug]/courses/index.tsx
@@ -48,7 +48,7 @@ const CoursesIndexPage = () => {
- {orgslug} courses :{" "}
+ {orgslug} Courses :{" "}
diff --git a/src/routers/courses/collections.py b/src/routers/courses/collections.py
index f62f3b32..e2ce3dc5 100644
--- a/src/routers/courses/collections.py
+++ b/src/routers/courses/collections.py
@@ -24,7 +24,7 @@ async def api_get_collection(collection_id: str, current_user: PublicUser = Depe
@router.get("/page/{page}/limit/{limit}")
-async def api_get_collection_by(page: int, limit: int, current_user: PublicUser = Depends(get_current_user)):
+async def api_get_collections_by(page: int, limit: int, current_user: PublicUser = Depends(get_current_user)):
"""
Get collections by page and limit
"""
diff --git a/src/services/courses/collections.py b/src/services/courses/collections.py
index 7c373567..abb020f1 100644
--- a/src/services/courses/collections.py
+++ b/src/services/courses/collections.py
@@ -14,8 +14,8 @@ from datetime import datetime
class Collection(BaseModel):
name: str
description: str
- courses: List[str] # course_id
- org_id: str # org_id
+ courses: List[str] # course_id
+ org_id: str # org_id
class CollectionInDB(Collection):
@@ -36,7 +36,7 @@ async def get_collection(collection_id: str, current_user: PublicUser):
# verify collection rights
await verify_collection_rights(collection_id, current_user, "read")
-
+
if not collection:
raise HTTPException(
status_code=status.HTTP_409_CONFLICT, detail="Collection does not exist")
@@ -50,9 +50,10 @@ async def create_collection(collection_object: Collection, current_user: PublicU
collections = learnhouseDB["collections"]
# find if collection already exists using name
- isCollectionNameAvailable = collections.find_one({"name": collection_object.name})
-
- # TODO
+ isCollectionNameAvailable = collections.find_one(
+ {"name": collection_object.name})
+
+ # TODO
# await verify_collection_rights("*", current_user, "create")
if isCollectionNameAvailable:
@@ -62,7 +63,8 @@ async def create_collection(collection_object: Collection, current_user: PublicU
# generate collection_id with uuid4
collection_id = str(f"collection_{uuid4()}")
- collection = CollectionInDB(collection_id=collection_id, **collection_object.dict())
+ collection = CollectionInDB(
+ collection_id=collection_id, **collection_object.dict())
collection_in_db = collections.insert_one(collection.dict())
@@ -83,7 +85,6 @@ async def update_collection(collection_object: Collection, collection_id: str, c
collection = collections.find_one({"collection_id": collection_id})
-
if not collection:
raise HTTPException(
status_code=status.HTTP_409_CONFLICT, detail="Collection does not exist")
@@ -91,7 +92,8 @@ async def update_collection(collection_object: Collection, collection_id: str, c
updated_collection = CollectionInDB(
collection_id=collection_id, **collection_object.dict())
- collections.update_one({"collection_id": collection_id}, {"$set": updated_collection.dict()})
+ collections.update_one({"collection_id": collection_id}, {
+ "$set": updated_collection.dict()})
return Collection(**updated_collection.dict())
@@ -99,7 +101,7 @@ async def update_collection(collection_object: Collection, collection_id: str, c
async def delete_collection(collection_id: str, current_user: PublicUser):
await check_database()
- await verify_collection_rights(collection_id, current_user,"delete")
+ await verify_collection_rights(collection_id, current_user, "delete")
collections = learnhouseDB["collections"]
@@ -121,20 +123,36 @@ async def delete_collection(collection_id: str, current_user: PublicUser):
# Misc
####################################################
+
async def get_collections(page: int = 1, limit: int = 10):
## TODO : auth
await check_database()
collections = learnhouseDB["collections"]
- # get all collections from database
- all_collections = collections.find().sort("name", 1).skip(10 * (page - 1)).limit(limit)
-
- # TODO : Check rights for each collection
- return [json.loads(json.dumps(collection, default=str)) for collection in all_collections]
+ # get all collections from database without ObjectId
+ all_collections = collections.find({}).sort(
+ "name", 1).skip(10 * (page - 1)).limit(limit)
+ # create list of collections and include courses in each collection
+ collections_list = []
+ for collection in all_collections:
+ collection = CollectionInDB(**collection)
+ collections_list.append(collection)
+
+ collection_courses = [course for course in collection.courses]
+ # add courses to collection
+ courses = learnhouseDB["courses"]
+ collection.courses = []
+ collection.courses = courses.find(
+ {"course_id": {"$in": collection_courses}}, {'_id': 0})
+
+ collection.courses = [course for course in collection.courses]
+
+ return collections_list
#### Security ####################################################
+
async def verify_collection_rights(collection_id: str, current_user: PublicUser, action: str):
await check_database()
collections = learnhouseDB["collections"]