Individual Contributions ‐ Muhammed Emin ARAYICI - bounswe/bounswe2024group11 GitHub Wiki
Muhammed Emin Arayıcı
Responsibilities
- Develop mobile application
- Deployment of the full application
Main Contributions
- Develop a mock server for mobile development
- Implement the core forum screens 2.1. Forum feed 2.2. Forum question detail & answer
- Implement quiz screens 3.1. Quiz feed 3.2. Quiz detail 3.3. Take/re-attempt quiz 3.4. Review quiz 3.5. Create quiz
- Build APK of mobile application and make it can be used in a physical device
- Prepare remote server for deployment
- Write a Makefile for automation 6.1. Building containers 6.2. Pushing containers to Docker Hub 6.3. Down the containers in a deployment server 6.4. Secure Copy (scp) necessary artifacts to the deployment server 6.5. Up the new version on the deployment server
API Contributions
- I fixed some fields for a few endpoints in the backend. They are about using linked data ID. The IDs always start with a
bn:
prefix, but the colon symbol creates a problem when sending the request. So, I changed the logic to make the endpoints accept the id after the prefix as a parameter, and then add the prefix internally when it utilizes the third-party API. I also updated the Swagger documentation accordingly. - I used
/forum-questions
endpoint in the forum feed. It has lots of fields, some of them are complex objects. Since I use TypeScript in the mobile development, it is a bit different to manage the types and schemas with respect to regular endpoints.
Here is a sample call to the endpoint from the terminal using curl
:
curl --location 'http://138.68.97.90/api/v1/forum-questions/'
An example response:
{
"count": 10,
"next": null,
"previous": null,
"results": [
{
"id": 16,
"title": "Quiz Question: \"trunk\"",
"question": "Can you help me with trunk?",
"tags": [],
"author": {
"id": 10,
"username": "pelinuc",
"email": "[email protected]",
"full_name": "Pelin Üçvet",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Shelley Bishop"
},
"created_at": "2024-11-27T20:35:58.628605Z",
"answers_count": 0,
"is_bookmarked": null,
"is_upvoted": null,
"upvotes_count": 0,
"is_downvoted": null,
"downvotes_count": 0,
"answers": [],
"is_my_forum_question": false,
"quiz_question": {
"id": 46,
"question_text": "trunk",
"question_point": 0,
"choices": [
{
"id": 181,
"choice_text": "direksiyon",
"is_correct": false
},
{
"id": 182,
"choice_text": "kaput",
"is_correct": false
},
{
"id": 183,
"choice_text": "bagaj",
"is_correct": true
},
{
"id": 184,
"choice_text": "fren",
"is_correct": false
}
],
"hints": [
{
"id": 25,
"type": "definitions",
"text": "Compartment in an automobile that carries luggage or shopping or tools"
}
]
},
"quiz_question_type": 1
},
{
"id": 15,
"title": "About uzum",
"question": "why is this so common?",
"tags": [
{
"name": "üzüm",
"linked_data_id": "bn:00041399n",
"description": "Üzüm, yaprak döken odunsu asmaların vitis cinsinden çiçekli bitki meyvesinin adıdır."
}
],
"author": {
"id": 13,
"username": "hasan_s2000",
"email": "[email protected]",
"full_name": "Hasan Kerem",
"avatar": "https://i.pinimg.com/736x/cb/01/86/cb018657990003ea87b39e08ceafd032.jpg"
},
"created_at": "2024-11-26T12:53:22.173217Z",
"answers_count": 0,
"is_bookmarked": null,
"is_upvoted": null,
"upvotes_count": 0,
"is_downvoted": null,
"downvotes_count": 0,
"answers": [],
"is_my_forum_question": false,
"quiz_question": null,
"quiz_question_type": null
},
{
"id": 14,
"title": "debriyaj",
"question": "i did not understand what debriyaj in english",
"tags": [
{
"name": "clutch",
"linked_data_id": "bn:00019475n",
"description": "The act of grasping"
},
{
"name": "clutch",
"linked_data_id": "bn:00085207v",
"description": "Take hold of; grab"
}
],
"author": {
"id": 13,
"username": "hasan_s2000",
"email": "[email protected]",
"full_name": "Hasan Kerem",
"avatar": "https://i.pinimg.com/736x/cb/01/86/cb018657990003ea87b39e08ceafd032.jpg"
},
"created_at": "2024-11-26T12:51:21.393118Z",
"answers_count": 0,
"is_bookmarked": null,
"is_upvoted": null,
"upvotes_count": 0,
"is_downvoted": null,
"downvotes_count": 0,
"answers": [],
"is_my_forum_question": false,
"quiz_question": null,
"quiz_question_type": null
},
{
"id": 13,
"title": "debriyaj",
"question": "Quiz option: debriyaj?",
"tags": [],
"author": {
"id": 13,
"username": "hasan_s2000",
"email": "[email protected]",
"full_name": "Hasan Kerem",
"avatar": "https://i.pinimg.com/736x/cb/01/86/cb018657990003ea87b39e08ceafd032.jpg"
},
"created_at": "2024-11-26T12:49:04.202449Z",
"answers_count": 1,
"is_bookmarked": null,
"is_upvoted": null,
"upvotes_count": 0,
"is_downvoted": null,
"downvotes_count": 1,
"answers": [
{
"id": 13,
"answer": "what the heck mate",
"author": {
"id": 13,
"username": "hasan_s2000",
"email": "[email protected]",
"full_name": "Hasan Kerem",
"avatar": "https://i.pinimg.com/736x/cb/01/86/cb018657990003ea87b39e08ceafd032.jpg"
},
"created_at": "2024-11-26T12:50:24.262884Z",
"is_my_answer": null,
"is_upvoted": null,
"is_downvoted": null,
"upvotes_count": 0,
"downvotes_count": 0,
"forum_question": 13
}
],
"is_my_forum_question": false,
"quiz_question": null,
"quiz_question_type": null
},
{
"id": 10,
"title": "Quiz Question: \"Vaccine\"",
"question": "Can you help me with Vaccine?",
"tags": [],
"author": {
"id": 10,
"username": "pelinuc",
"email": "[email protected]",
"full_name": "Pelin Üçvet",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Shelley Bishop"
},
"created_at": "2024-11-25T17:50:49.668249Z",
"answers_count": 1,
"is_bookmarked": null,
"is_upvoted": null,
"upvotes_count": 5,
"is_downvoted": null,
"downvotes_count": 0,
"answers": [
{
"id": 10,
"answer": "It is an interesting word. I am not sure that I can help you with that. Is there anyone who can give a hand?",
"author": {
"id": 11,
"username": "necip1515",
"email": "[email protected]",
"full_name": "Necip Bilgehan",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Jaime Rogers"
},
"created_at": "2024-11-25T19:01:50.185261Z",
"is_my_answer": null,
"is_upvoted": null,
"is_downvoted": null,
"upvotes_count": 0,
"downvotes_count": 0,
"forum_question": 10
}
],
"is_my_forum_question": false,
"quiz_question": {
"id": 37,
"question_text": "Vaccine",
"question_point": 0,
"choices": [
{
"id": 145,
"choice_text": "şurup",
"is_correct": false
},
{
"id": 146,
"choice_text": "ilaç",
"is_correct": false
},
{
"id": 147,
"choice_text": "reçete",
"is_correct": false
},
{
"id": 148,
"choice_text": "Aşı",
"is_correct": true
}
],
"hints": []
},
"quiz_question_type": 1
},
{
"id": 9,
"title": "Quiz Question: \"Vaccine\"",
"question": "I solved this question correctly, but I'm unsure about its usage.",
"tags": [],
"author": {
"id": 6,
"username": "ali",
"email": "[email protected]",
"full_name": "Ali Yılmaz",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Rebecca Weiss"
},
"created_at": "2024-11-25T17:50:15.286368Z",
"answers_count": 0,
"is_bookmarked": null,
"is_upvoted": null,
"upvotes_count": 2,
"is_downvoted": null,
"downvotes_count": 1,
"answers": [],
"is_my_forum_question": false,
"quiz_question": {
"id": 37,
"question_text": "Vaccine",
"question_point": 0,
"choices": [
{
"id": 145,
"choice_text": "şurup",
"is_correct": false
},
{
"id": 146,
"choice_text": "ilaç",
"is_correct": false
},
{
"id": 147,
"choice_text": "reçete",
"is_correct": false
},
{
"id": 148,
"choice_text": "Aşı",
"is_correct": true
}
],
"hints": []
},
"quiz_question_type": 1
},
{
"id": 8,
"title": "Karadeniz BöLgesi",
"question": "Why do we have this weird sponge bob case in this word?\nAm I missing something or is this a funny little bug hahaa.",
"tags": [
{
"name": "bug",
"linked_data_id": "bn:00013698n",
"description": "A fault or defect in a computer program, system, or machine"
}
],
"author": {
"id": 2,
"username": "umitcan07",
"email": "[email protected]",
"full_name": "Ümit Can Evleksiz",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Alicia Madden"
},
"created_at": "2024-11-25T16:29:01.096047Z",
"answers_count": 1,
"is_bookmarked": null,
"is_upvoted": null,
"upvotes_count": 2,
"is_downvoted": null,
"downvotes_count": 0,
"answers": [
{
"id": 9,
"answer": "Hahaha. I have no idea why it is like this. I am the creator of this quiz and I didn't question this situation at all. Hope developers fix this.",
"author": {
"id": 11,
"username": "necip1515",
"email": "[email protected]",
"full_name": "Necip Bilgehan",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Jaime Rogers"
},
"created_at": "2024-11-25T18:49:46.423880Z",
"is_my_answer": null,
"is_upvoted": null,
"is_downvoted": null,
"upvotes_count": 0,
"downvotes_count": 0,
"forum_question": 8
}
],
"is_my_forum_question": false,
"quiz_question": null,
"quiz_question_type": null
},
{
"id": 3,
"title": "What are the best ways to memorize English vocabulary?",
"question": "Hi! I’m learning English and find it hard to remember new words. What techniques do you use to memorize vocabulary effectively?",
"tags": [
{
"name": "vocabulary",
"linked_data_id": "bn:00080171n",
"description": "A listing of the words used in some enterprise"
}
],
"author": {
"id": 4,
"username": "muhammet_41",
"email": "[email protected]",
"full_name": "Muhammet Emin Çiftçi",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Samuel Watson"
},
"created_at": "2024-11-25T08:20:59.017855Z",
"answers_count": 2,
"is_bookmarked": null,
"is_upvoted": null,
"upvotes_count": 5,
"is_downvoted": null,
"downvotes_count": 0,
"answers": [
{
"id": 5,
"answer": "I write them 10 times on a paper",
"author": {
"id": 6,
"username": "ali",
"email": "[email protected]",
"full_name": "Ali Yılmaz",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Rebecca Weiss"
},
"created_at": "2024-11-25T13:59:46.232019Z",
"is_my_answer": null,
"is_upvoted": null,
"is_downvoted": null,
"upvotes_count": 0,
"downvotes_count": 0,
"forum_question": 3
},
{
"id": 6,
"answer": "I listen podcasts.",
"author": {
"id": 8,
"username": "yunusyilmaz",
"email": "[email protected]",
"full_name": "Yunus Yılmaz",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=James Castillo"
},
"created_at": "2024-11-25T15:02:32.125801Z",
"is_my_answer": null,
"is_upvoted": null,
"is_downvoted": null,
"upvotes_count": 1,
"downvotes_count": 0,
"forum_question": 3
}
],
"is_my_forum_question": false,
"quiz_question": null,
"quiz_question_type": null
},
{
"id": 2,
"title": "What’s the difference between \"shy\" and \"reserved\"?",
"question": "Hello! I often see the words \"shy\" and \"reserved\" used in English, but I’m not sure if they mean the same thing. Can anyone explain the difference? Examples would be great too!",
"tags": [
{
"name": "reserved",
"linked_data_id": "bn:00109713a",
"description": "Marked by self-restraint and reticence"
},
{
"name": "shy",
"linked_data_id": "bn:00101361a",
"description": "Lacking self-confidence"
},
{
"name": "emotion",
"linked_data_id": "bn:00030581n",
"description": "Any strong feeling"
},
{
"name": "vocabulary",
"linked_data_id": "bn:00080171n",
"description": "A listing of the words used in some enterprise"
}
],
"author": {
"id": 4,
"username": "muhammet_41",
"email": "[email protected]",
"full_name": "Muhammet Emin Çiftçi",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Samuel Watson"
},
"created_at": "2024-11-25T07:49:09.445405Z",
"answers_count": 1,
"is_bookmarked": null,
"is_upvoted": null,
"upvotes_count": 3,
"is_downvoted": null,
"downvotes_count": 0,
"answers": [
{
"id": 4,
"answer": "Actually, there is no difference at all",
"author": {
"id": 6,
"username": "ali",
"email": "[email protected]",
"full_name": "Ali Yılmaz",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Rebecca Weiss"
},
"created_at": "2024-11-25T12:49:30.861025Z",
"is_my_answer": null,
"is_upvoted": null,
"is_downvoted": null,
"upvotes_count": 1,
"downvotes_count": 1,
"forum_question": 2
}
],
"is_my_forum_question": false,
"quiz_question": null,
"quiz_question_type": null
},
{
"id": 1,
"title": "How can I improve my English pronunciation while learning with Turquiz?",
"question": "I’ve been using the Turquiz app to learn English, and it’s been really helpful for vocabulary and grammar. However, I’m struggling with pronunciation. Does anyone have tips, resources, or specific exercises that work well alongside Turquiz? I’d love to hear how others are improving their speaking skills!",
"tags": [
{
"name": "pronunciation",
"linked_data_id": "bn:00064723n",
"description": "The manner in which someone utters a word"
},
{
"name": "speaking",
"linked_data_id": "bn:00049911n",
"description": "(language) communication by word of mouth"
},
{
"name": "exercise",
"linked_data_id": "bn:00032203n",
"description": "The activity of exerting your muscles in various ways to keep fit"
}
],
"author": {
"id": 2,
"username": "umitcan07",
"email": "[email protected]",
"full_name": "Ümit Can Evleksiz",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Alicia Madden"
},
"created_at": "2024-11-24T23:28:38.526476Z",
"answers_count": 4,
"is_bookmarked": null,
"is_upvoted": null,
"upvotes_count": 4,
"is_downvoted": null,
"downvotes_count": 1,
"answers": [
{
"id": 1,
"answer": "Eager to learn from you guys...",
"author": {
"id": 2,
"username": "umitcan07",
"email": "[email protected]",
"full_name": "Ümit Can Evleksiz",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Alicia Madden"
},
"created_at": "2024-11-24T23:29:29.992480Z",
"is_my_answer": null,
"is_upvoted": null,
"is_downvoted": null,
"upvotes_count": 0,
"downvotes_count": 0,
"forum_question": 1
},
{
"id": 2,
"answer": "Hello Ümit. I highly recommend recording yourself while practicing pronunciation. For example, read a passage out loud and then listen to the recording. Compare it to a native speaker’s version and note the differences.\nHope it helps!!",
"author": {
"id": 4,
"username": "muhammet_41",
"email": "[email protected]",
"full_name": "Muhammet Emin Çiftçi",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Samuel Watson"
},
"created_at": "2024-11-25T07:45:21.691671Z",
"is_my_answer": null,
"is_upvoted": null,
"is_downvoted": null,
"upvotes_count": 1,
"downvotes_count": 0,
"forum_question": 1
},
{
"id": 3,
"answer": "Alright, listen up Ümit. Here's how you're going to do it. You focus on something called 'minimal pairs.' Words that sound nearly identical but aren't. Take 'ship' and 'sheep,' for example. Practicing these? It'll train your ears and sharpen your pronunciation.",
"author": {
"id": 5,
"username": "walter_green",
"email": "[email protected]",
"full_name": "Walter Green",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Anthony Robinson"
},
"created_at": "2024-11-25T08:36:54.919931Z",
"is_my_answer": null,
"is_upvoted": null,
"is_downvoted": null,
"upvotes_count": 0,
"downvotes_count": 0,
"forum_question": 1
},
{
"id": 12,
"answer": "Great discussion, thanks all.\nI am gonna practice more........",
"author": {
"id": 13,
"username": "hasan_s2000",
"email": "[email protected]",
"full_name": "Hasan Kerem",
"avatar": "https://i.pinimg.com/736x/cb/01/86/cb018657990003ea87b39e08ceafd032.jpg"
},
"created_at": "2024-11-26T10:57:10.475321Z",
"is_my_answer": null,
"is_upvoted": null,
"is_downvoted": null,
"upvotes_count": 0,
"downvotes_count": 0,
"forum_question": 1
}
],
"is_my_forum_question": false,
"quiz_question": null,
"quiz_question_type": null
}
]
}
- I used
/quizzes
endpoint to create new quizzes. The most difficult part is to manage the states for such a complex endpoint. It has lots of array fields. Also, to fill all the fields based on the inputs taken from the user, there are lots of intermediary calls needs to be handled. I have written the part that is making this call twice. The first one was kind a prototype. And then, I deleted it and rewrite from scratch.
Here is a sample call to the endpoint from the terminal using curl
(Before executing it, you may need to change Bearer token in the headers part with an active JWT access token of yourself):
curl --location 'http://138.68.97.90/api/v1/quizzes/' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzMzNDg0MTU3LCJpYXQiOjE3MzI4NzkzNTcsImp0aSI6ImE4OWQyYzAyODBjZjRhYzBiYTE1MzdmOGNjNzM5ZTA0IiwidXNlcl9pZCI6Nn0.03gzkzorvJpQyrFdBcUVYNpTxisuoqRBIpNhk9BidO0' \
--data '{
"title": "Cars",
"description": "Cars enthusiasts'\'' checklist",
"tags": [
{
"name": "car",
"linked_data_id": "00007309n",
"description": "A motor vehicle with four wheels; usually propelled by an internal combustion engine"
},
{
"name": "vehicle",
"linked_data_id": "00079675n",
"description": "A conveyance that transports people or objects"
}
],
"type": 1,
"questions": [
{
"question_text": "trunk",
"question_point": 20,
"choices": [
{
"choice_text": "kaput",
"is_correct": false
},
{
"choice_text": "bagaj",
"is_correct": true
},
{
"choice_text": "direksiyon",
"is_correct": false
},
{
"choice_text": "fren",
"is_correct": false
}
],
"hints": [
{
"type": "definition",
"text": "Compartment in an automobile that carries luggage or shopping or tools"
}
]
},
{
"question_text": "wheel",
"question_point": 20,
"choices": [
{
"choice_text": "tekerlek",
"is_correct": true
},
{
"choice_text": "koltuk",
"is_correct": false
},
{
"choice_text": "gaz",
"is_correct": false
},
{
"choice_text": "vites kolu",
"is_correct": false
}
],
"hints": []
}
]
}'
An example response:
{
"id": 16,
"title": "Cars",
"description": "Cars enthusiasts' checklist",
"difficulty": 2,
"author": {
"id": 6,
"username": "ali",
"email": "[email protected]",
"full_name": "Ali Yılmaz",
"avatar": "https://api.dicebear.com/9.x/avataaars/webp?accessories=eyepatch,kurt,prescription01&seed=Rebecca Weiss"
},
"tags": [
{
"name": "car",
"linked_data_id": "00007309n",
"description": "A motor vehicle with four wheels; usually propelled by an internal combustion engine"
},
{
"name": "vehicle",
"linked_data_id": "00079675n",
"description": "A conveyance that transports people or objects"
}
],
"type": 1,
"created_at": "2024-11-29T11:31:34.229095Z",
"questions": [
{
"id": 49,
"question_text": "trunk",
"question_point": 20,
"choices": [
{
"id": 190,
"choice_text": "kaput",
"is_correct": false
},
{
"id": 191,
"choice_text": "bagaj",
"is_correct": true
},
{
"id": 192,
"choice_text": "direksiyon",
"is_correct": false
},
{
"id": 193,
"choice_text": "fren",
"is_correct": false
}
],
"hints": [
{
"id": 26,
"type": "definition",
"text": "Compartment in an automobile that carries luggage or shopping or tools"
}
]
},
{
"id": 50,
"question_text": "wheel",
"question_point": 20,
"choices": [
{
"id": 194,
"choice_text": "tekerlek",
"is_correct": true
},
{
"id": 195,
"choice_text": "koltuk",
"is_correct": false
},
{
"id": 196,
"choice_text": "gaz",
"is_correct": false
},
{
"id": 197,
"choice_text": "vites kolu",
"is_correct": false
}
],
"hints": []
}
],
"num_taken": 0,
"is_taken": false,
"rating": {
"score": null,
"count": 0
},
"is_my_quiz": true,
"quiz_point": 40
}
Code Related Significant Issues
Issue |
---|
#724 |
PRs
PR | Conflict Summary |
---|---|
#591 | It seems there was no conflict at all. |
#610 | It seems there was no conflict at all. |
#646 | - |
#654 | It seems there was no conflict at all. |
#659 | It was a big PR. While developing features, I regularly merge the current changes from the base branch. So, there was no significant conflict. |
#670 | I don't remember what happened. |
#676 | It seems there was no conflict at all. |
#706 | I don't remember what happened. But I remember there are some node_modules and package.json files in an unexpected place. I talked with the PR owner and then removed them. |
#715 | It was a big PR. While developing features, I regularly merge the current changes from the base branch. So, there was no significant conflict. |