Apollo/apollo-frontend/src/app/db.service.ts
2021-03-12 21:38:38 +02:00

477 lines
20 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Injectable } from '@angular/core';
export interface Minigame {
name: string;
url: string;
comingSoon?: boolean;
}
export interface CardParagraph {
heading: string;
content: string;
}
export interface Card {
info: CardParagraph[];
imageUrl: string;
name: string;
types: Array<"endangered" | "normal">;
}
export interface Answer {
choises: string[];
correctChoise: string;
}
export interface Question {
category: string;
question: string;
photoUrlsAbove?: string[];
answer: Answer;
}
export interface Saved<T> {
id: string;
el: T;
}
@Injectable({
providedIn: 'root'
})
export class DbService {
private mock_minigames: Saved<Minigame>[] = [
{
id: '0',
el: {
name: 'Рециклиране',
url: '/minigames/conveyor-belt',
comingSoon: true,
}
},
{
id: '0',
el: {
name: 'BioTrivia',
url: '/minigames/biotrivia',
}
}
];
private mock_card_types: Saved<Card>[] = [
{
id: '0',
el: {
name: 'Пингвин',
types: ['normal'],
imageUrl: '/assets/images/cards/pingvin.jpg',
info: [
{
content: 'Тъй като нямат естествен враг на сушата, пингвините не показват страх, а любопитство когато към тях се приближи човек.',
heading: 'Интересно'
}
]
}
},
{
id: '1',
el: {
name: 'Пингвин',
types: ['normal'],
imageUrl: '/assets/images/cards/pingvin2.jpg',
info: [
{
content: 'Пингвините мътят яйцата си на смени. Когато мъжкият отиде да яде, той не може да намери пътя обратно към гнездото и започва да крещи шумно. Женските разпознават гласовете на партньорите си сред хиляди други и крещят в отговор, така че те да знаят къде да се върнат.',
heading: 'Интересно'
}
]
}
},
{
id: '2',
el: {
name: 'Делфин',
types: ['normal'],
imageUrl: '/assets/images/cards/delfin.jpg',
info: [
{
content: 'Делфините общуват по между си с помощта на звуци, като всеки звук може да изразява различно настроение.',
heading: 'Интересно'
}
]
}
},
{
id: '3',
el: {
name: 'Делфин',
types: ['normal'],
imageUrl: '/assets/images/cards/delfin2.jpg',
info: [
{
content: 'Делфините никога не заспиват напълно. Докато си почиват, едната половина на мозъка им продължава да бъде активна. Ето защо дори и по време на сън едното им око остава отворено.',
heading: 'Интересно'
}
]
},
},
{
id: '4',
el: {
name: 'Син кит',
types: ['normal'],
imageUrl: '/assets/images/cards/sinkit.jpg',
info: [
{
content: 'Освен най-едрото, синият кит е и най-шумното животно звукът, който издава е от порядъка на 188 децибела и може да бъде чут на разстояние до 800 км. За сравнение, звукът на пътнически самолет е „едва” 120 децибела.',
heading: 'Интересно'
}
]
}
},
{
id: '5',
el: {
name: 'Син кит',
types: ['normal'],
imageUrl: '/assets/images/cards/sinkit2.jpg',
info: [
{
content: 'Езикът на кита тежи около 4,7 тона',
heading: 'Интересно'
}
]
}
},
{
id: '6',
el: {
name: 'Пор',
types: ['endangered'],
imageUrl: '/assets/images/cards/por.jpg',
info: [
{
heading: 'Морфология на "пор"',
content: 'Думата "пор" произлиза от латински и означава "крадец".',
},
{
heading: 'Застрашен вид',
content: 'Загубата на местообитания и бракониерството, са причина днес те или техните следи да се наблюдават изключително рядко.',
},
],
},
},
{
id: '7',
el: {
name: 'Кафява мечка',
types: ['endangered'],
imageUrl: '/assets/images/cards/kafqva-mechka.jpg',
info: [
{
heading: 'Сладки сънища',
content: 'Учените вярват, че мечките могат да сънуват.',
},
{
heading: 'Fast as f',
content: 'Макар да изглеждат тромави,мечките могат да тичат с до 60 км/ч.',
},
{
heading: 'Застрашен вид',
content: 'За съжаление хората им нанасят непоправими щети, като разкъсват с пътища и огради ареала им, унищожават горите и ги избиват.',
},
],
},
},
{
id: '8',
el: {
name: 'Балканска дива коза',
types: ['endangered'],
imageUrl: '/assets/images/cards/koza.jpg',
info: [
{
heading: 'Властелина на пръстените',
content: 'Знаехте ли, че всяка година се прибавя по още един пръстен върху рогата на дивата коза, като така може да се определи възрастта на даденото животно.',
},
{
heading: 'И ся почваме да бегами',
content: 'На света няма друго животно, което да притежава по-голяма ловкост и бързина на придвижване по хлъзгави и стръмни терени.',
},
],
},
},
{
id: '9',
el: {
name: 'Прилеп',
types: ['endangered'],
imageUrl: '/assets/images/cards/prilep.jpg',
info: [
{
heading: 'Напаст пещерна',
content: 'най-голямата колония от прилепи в света наброява над 20 милиона броя от тези летящи създания.',
},
{
heading: 'Ехо .... (ехо)',
content: 'Прилепите използват ехолокация, за да се заобиколят в тъмното.',
},
{
heading: 'Защитен вид',
content: 'Според българското законодателство, прилепите са защитени видове.',
},
],
},
},
{
id: '10',
el: {
name: 'Лалугер',
types: ['endangered'],
imageUrl: '/assets/images/cards/laluger.jpg',
info: [
{
heading: 'Втори братовчед на ленивеца',
content: 'Когато е студено, той заспива зимен сън и се събужда едва през пролетта.',
},
{
heading: 'Мали ша са напикая',
content: 'Когато е изплашен, той застава на задните си лапи.',
},
{
heading: 'Защитен вид',
content: 'Интензивно селско стопанство и използване на пестициди причиняват бързото изчезване на този вид.',
},
],
},
},
{
id: '11',
el: {
name: 'Етруската земеровка',
types: ['endangered'],
imageUrl: '/assets/images/cards/zemerovka.jpg',
info: [
{
heading: 'Размер',
content: 'Един от най-дребните бозайници на планетата с размери едва 3,6 до 5,2 см и тегло от 1,25 до 2,34 грама!',
},
{
heading: 'Лакомници',
content: 'Етруската земеровка трява да яде непрекъснато за да може да живее.',
},
],
},
},
{
id: '12',
el: {
name: 'Тюленът монах',
types: ['endangered'],
imageUrl: '/assets/images/cards/tuleni.jpg',
info: [
{
heading: 'Техния живот',
content: 'Те се крият в подводни пещери, където си почиват и раждат своите малки.',
},
],
},
},
{
id: '13',
el: {
name: 'Видра',
types: ['endangered'],
imageUrl: '/assets/images/cards/vidra.jpg',
info: [
{
heading: 'Мали колко сладко',
content: 'Морските видри се държат за ръце докато спят, за да не бъдат разделени от теченията докато се носят по водната повърхност.',
},
{
heading: 'NO MERCY',
content: 'В момент на опасност видрите показват бебетата си на хищниците, за да предизвикат съчувствие и по този начин да избегнат атаката.',
},
],
},
},
{
id: '14',
el: {
name: 'Ловен сокол',
types: ['endangered'],
imageUrl: '/assets/images/cards/sokol.jpg',
info: [
{
heading: 'Ловни навици',
content: 'Те не ловуват близо до гнездата си, а се опитват да летят доколкото е възможно.',
},
{
heading: 'Застрашен вид',
content: 'Има опасност от изчезване. Основната причина, поради която населението на ловния сокол намалява, е човешката дейност.',
},
],
},
},
];
private mock_questions: Saved<Question>[] = [
{
id: '0',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/slon.jpg' ],
question: 'Защо бройката на слоновете в Африка намалява?',
answer: {
choises: [
'Убиван е от други животни',
'Липса на храна',
'Убивани са от бракониери',
'Замърсяване на въздуха'
],
correctChoise: 'Убивани са от бракониери',
}
}
},
{
id: '1',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/carski orel.jpg' ],
question: 'Каква е главната причина за намаляването на бройките Царски орли?',
answer: {
choises: [
'Бракониери',
'Замърсяване',
'Отсичане на горите',
'Електрически стълбове'
],
correctChoise: 'Електрически стълбове',
}
}
},
{
id: '2',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/carski orel.jpg' ],
question: 'Каква е главната причина за намаляването на бройките Царски орли?',
answer: {
choises: [
'Бракониери',
'Замърсяване',
'Отсичане на горите',
'Електрически стълбове'
],
correctChoise: 'Електрически стълбове',
}
}
},
{
id: '3',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/zlatna zhaba.png' ],
question: 'Каква е причината за изчезването на Златната жаба?',
answer: {
choises: [
'Глобално затопляне',
'Замърсяване на реките',
'Отсичане на горите',
'Недостиг на храна'
],
correctChoise: 'Глобално затопляне',
}
}
},
{
id: '4',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/shtigga.png' ],
question: 'Каква е причината за намаляването на бройките на Черният щъркел?',
answer: {
choises: [
'Замърсяването на блатата и езерата',
'Недостиг на храна',
'Глобално затопляне',
'Естествени врагове',
],
correctChoise: 'Замърсяването на блатата и езерата',
}
}
},
{
id: '5',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/tulen.jpg' ],
question: 'Вярно или грешно. От 1996г. тюлените в Черно море намаляват, като днес те са почти изчезнали у нас.',
answer: {
choises: [
'Вярно',
'Грешно',
],
correctChoise: 'Грешно',
}
}
},
{
id: '6',
el: {
category: 'animals',
photoUrlsAbove: [ '/assets/images/questions/ris.jpg' ],
question: 'Каква е причината за намаляването на бройките рисове в България?',
answer: {
choises: [
'Глобално затопляне',
'Незаконно избиване за козината им',
'Разрушаването на местообитанията им',
'Убиван е от естествени врагове',
],
correctChoise: 'Незаконно избиване за козината им',
}
}
},
];
private mock_question_categories: string[] = [ 'animals' ];
private getRandomEls<T>(array: T[], n: number): T[] {
const result: T[] = new Array(n);
let len = array.length;
const taken = new Array(len);
if (n > len)
throw new RangeError("getRandom: more elements taken than available");
while (n--) {
const x = Math.floor(Math.random() * len);
result[n] = array[x in taken ? taken[x] : x];
taken[x] = --len in taken ? taken[len] : len;
}
return result;
}
getAllMinigames(): Saved<Minigame>[] {
return this.mock_minigames;
}
getAllCards(): Saved<Card>[] {
return this.mock_card_types;
}
getMinigame(id: string): Minigame {
const index = this.mock_minigames.findIndex(v => v.id === id);
if (index < 0) return null;
else return this.mock_minigames[index].el;
}
getCard(id: string): Card {
const index = this.mock_card_types.findIndex(v => v.id === id);
if (index < 0) return null;
else return this.mock_card_types[index].el;
}
getRandomQuestions(n: number, category: string): Question[] {
return this.getRandomEls(this.mock_questions
.filter(v => v.el.category === category)
.map(v => v.el), n);
}
getRandomCategory(): string {
return this.getRandomEls(this.mock_question_categories, 1)[0];
}
constructor() { }
}