Skip to content

Instantly share code, notes, and snippets.

@davidgabrichidze
Last active June 26, 2022 07:33
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save davidgabrichidze/69419ab58bc856afdb8e2ef7ae609e92 to your computer and use it in GitHub Desktop.
Save davidgabrichidze/69419ab58bc856afdb8e2ef7ae609e92 to your computer and use it in GitHub Desktop.

Note: This challenge is obsolete

📃 დავალების აღწერა

შესავალი

Optio.Ai ქართული ფინტექ სტარტაპია, რომელიც ბანკებს დიდი მონაცემების (Big Data) სწრაფი კონსოლიდაციის, აგრეგაციის, ანალიზის და მონაცემებზე დაფუძნებული გადაწყვეტილებების მიღების საშუალებას აძლევს მანქანური სწავლებისა და ხელოვნური ინტელექტის გამოყენებით.

ამოცანა

შენი ამოცანაა დაეხმარო Optio.Ai პლატფორმის მომხმარებელს და აჩვენო აგრეგირებული მონაცემები სხვადახვა ჭრილში. ამისათვის საჭიროა შექმნა ორი გვერდი, დეშბორდი და ცხრილი, რომლისთვისაც მონაცემებს აიღებ Optio.Ai-ს სატესტო API-დან. ქვემოთ მოცემულია თითოეული გვერდის დეტალური აღწერა და API სერვისის დოკუმენტაცია მაგალითებითურთ.

🛠️ API სერვისის დოკუმენტაცია

Optio.Ai-ის სატესტო API-ის ეს ორი მეთოდი საკმარისია ამოცანის შესასრულებლად:

  1. /api/v2/analytics/transactions/facts/aggregate - აბრუნებს აგრეგირებულ ფაქტებს განზომილებებისა და ფილტრების მიხედვით;
  2. /api/v2/analytics/transactions/facts/find - აბრუნებს ფაქტებს თითოეული თარიღისთვის, განზომილებებისა და ფილტრების მიხედვით.

პროგრამირების დაწყებამდე Swagger-ით შეგიძლია გამოსცადო API-ს ფუნქციონალობა ამ მისამართზე: https://api.next.insight.optio.ai/api/docs/analytics

📊 დეშბორდის გვერდი

ანალიტიკურ დეშბორდზე უნდა განათავსო სამი გრაფიკი და ერთი ცხრილი

ხარჯების კატეგორიები და განაწილება

აღწერა: გრაფიკზე ჩანს ყველა კლიენტის ჯამური ხარჯის მოცულობა კატეგორიების მიხედვით.

გრაფიკის ტიპი: Donut Chart

API-ს მისამართი: /…/facts/aggregate

API-ს პარამეტრები:

{
  "dimension": "parent-category",
  "types": [
    "spending", "withdrawal"
  ],
  "gteDate": "2018-01-01",
  "lteDate": "2018-01-31",
  "includeMetrics": [
    "volume"
  ]
}

ხარჯვის ინტენსივობა დღეების მიხედვით

აღწერა: გრაფიკზე ჩანს ყველა კლიენტის ჯამური ხარჯის მოცულობა ან ტრანზაქციების რაოდენობა, დღეების მიხედვით. მომოხმარებელს უნდა შეეძლოს აირჩიოს თანხის მოცულობის დათვალიერება უნდა თუ ტრაზაქციების რაოდენობის.

გრაფიკის ტიპი: Heatmap

API: /…/facts/aggregate

API-ს პარამეტრები:

{
  "dimension": "date",
  "types": [
    "spending", "withdrawal"
  ],
  "gteDate": "2018-01-01",
  "lteDate": "2018-01-31",
  "includeMetrics": [
    "volume", "quantity"
  ]
}

შემოსავლების კატეგორიები თარიღების მიხედვით

აღწერა: გრაფიკზე ჩანს ყველა კლიენტის შემოსავლების ჯამური მოცულობა კატეგორიების და თარიღების მიხედვით.

გრაფიკის ტიპი: Line Chart

API-ს მისამართი: /…/facts/find

API-ს პარამეტრები:

{
  "dimension": "category",
  "types": [
    "income"
  ],
  "gteDate": "2018-01-01",
  "lteDate": "2018-01-31",
  "sortBy": "date",
  "sortDirection": "asc",
  "pageIndex": 0,
  "pageSize": 50,	
  "includes": ["dimension", "date", "volume"]
}

გაითვალისწინეთ, რომ find-ის API-ის აქვს გადაფურცვლის (paging) მხარდაჭერა. შესაბამისად, იმდენჯერ მოგიწევთ ფუნქციის გამოძახება, სანამ არ წამოიღებთ ყველა ჩანაწერს ფილტრებით.

ცხრილი - პოპულარული მერჩანტები

აღწერა: ეს არის ცხრილი, სადაც ჩანს 20 ყველაზე პოპულარული ობიექტი (მერჩანტი), რომლებშიც ბანკის კლიენტებმა ჯამურად ყველაზე მეტი თანხა დახარჯეს
გრაფიკის ტიპი: ჩვეულებრივი ცხრილი

API-ს მისამართი: /…/facts/aggregate

API-ს პარამეტრები:

{
  "dimension": "merchant",
  "types": [
    "none"
  ],
  "gteDate": "2018-01-01",
  "lteDate": "2018-01-31",
  "includeMetrics": [
    "volume"
  ]
}

გაითვალისწინეთ, რომ API დააბრუნებს დაუსორტირებელ ყველა მერჩანტს. შესაბამისად თქვენ მოგიწევთ დაასორტიროთ კლებადობით ‘volume’ ველის მიხედვით და აჩვენოთ Top 20 ჩანაწერი.

🌍 ცხრილის გვერდი

ამ გვერდზე, ცხრილის სახით უნდა გამოჩნდეს ის მონაცემები, რაზეც შესაბამისი გრაფიკია დაფუძნებული. ცხრილი შედგება 7 სვეტისგან:

  • Dimension
  • Date
  • Quantity
  • Volume (GEL)
  • Average (GEL)
  • Difference quantity
  • Difference volume

ცხრილი უნდა აკმაყოფილებდეს შემდეგ მოთხოვნებს: \

  • მომხმარებელს უნდა შეეძლოს სხვადასხვა თარიღობრივი შუალედის არჩევა
  • მომხმარებელს უნდა შეეძლოს ცხრილის გადაფურცვლა (Paging) და ფურცელზე ჩანაწერების რაოდენობის მითითება (Page Size)
  • მომხმარებელს უნდა შეეძლოს ცხრილის სორტირება ნებისმიერი ველით
  • ბმულის კოპირება და თავიდან გახსნა უნდა იწვევდეს იგივე ინტერფეისის ჩატვირთვას, იგივე მონაცემებით

გვერდების სამომხმარებლო ინტერფეისი (UI) და სამომხმარებლო გამოცდილება (UX) შენი გემოვნებით და შეხედულებით შეიმუშავე, თუმცა სასურველია Responsive ინტერფეისები.

API-ს მისამართი: /…/facts/find

გრაფიკის ტიპი: ჩვეულებრივი ცხრილი

API-ს პარამეტრები: გამომდინარე იქიდან რომელი გრაფიკის დეტალებს გახსნით, უნდა გადმოსცეთ იგივე “dimension” და “types” პარამეტრები. დანარჩენი პარამეტრები შეიცვლება იმის მიხედვით თუ რითი დაასორტირებს ცხრილს ან გადაფურცვლის რა პარამეტრებს დააყენებს მომხმარებელი.

თუ დაგაინტერესებს შეგიძლია გაეცნო ანალიტიკის მოდულის განმარტებებს, რომელსაც ამ დავალებაში ვიყენებთ.

🛠️ გამოყენებული ტექნოლოგიები/კომპონენტები

ამოცანის გადაწყვეტა საჭიროა Angular-ის გამოყენებით, ხოლო გრაფიკებისა და ვიზუალიზაციისათვის გამოიყენე Apache Echarts ბიბლიოთეკა.

📧 დავალების მოწოდება და შეფასების კრიტერიუმები

ჩვენ ვეძებთ ახალგაზრდებს, რომლებიც ახლა იწყებენ პირველი კარიერული ნაბიჯების გადადგმას და გადაწყვეტილი აქვთ, რომ პროგრამირება მათი მთავარი პროფესიული საქმიანობაა.

ჩვენს გუნდში უკვე არიან შენნაირი დამწყები პროგრამისტები. მათ ყავთ საქართველოში ერთ-ერთი საუკეთესო მენტორი, რომელიც უზრუნველყოფს შენს პროფესიულ განვითარებას და დაგეხმარება შეისწავლო:

  • პროგრამირება Javascript/Typescript/Angular/NodeJS ენების და ტექნოლოგიების გამოყენებით;
  • Clean code-ის სტანდარტები;
  • Git-თან მუშაობის საუკეთესო პრაქტიკა;
  • კომპლექსური სისტემების არქიტექტურა;
  • გუნდური მუშაობა;
  • ავტომატური ტესტირება.

ჩვენთვის მნიშვნელოვანია ვიპოვოთ ცნობისმოყვარე, სწავლაზე და შრომაზე ორიენტირებული ადამიანები, რომლებიც გაივლიან ანაზღაურებად სტაჟირებას და წარმატებული სტაჟირების შემთხვევაში დასაქმდებიან ჩვენს კომპანიაში.

ამოცანის შესრულებისას ყურადღებას მივაქცევთ რამდენად სწორად არის გაგებული და შესრულებული ამოცანის მოთხოვნები და რამდენად არის დახარჯული დრო კოდის ხარისხზე, თუმცა შეზღუდული არ ხარ მხოლოდ ამოცანის მოთხოვნებით და ნებისმიერი დამატება და გაუმჯობესება მისასალმებელია.

⚠️ შესრულებული ამოცანის მოწოდების ბოლო ვადაა 26.04.2022. შესრულებული ამოცანა ატვირთე github-ზე და რეპოზიტორის ლინკი, CV-თან ერთად გამოგვიგზავნე ელექტრონული ფოსტის მისამართზე: hr@optio.ai, სათაურით challenge-april-2022.

წარმატებებს გისურვებთ! 🎉🎉🎉

@tornikepe
Copy link

image

ეს Apache Echarts აქედან?

@davidgabrichidze
Copy link
Author

@tornikepe დიახ, ყველა გრაფიკი Apache Echarts-დან

@Chanksela
Copy link

გამარჯობა, აპის მისამართი სადაა მითითითებული?

@davidgabrichidze
Copy link
Author

გამარჯობა, აპის მისამართი სადაა მითითითებული?

მითითებულია ‘API სერვისის დოკუმენტაციის’ პარაგრაფში:
https://api.next.insight.optio.ai/api/docs/analytics

@davidgabrichidze
Copy link
Author

გაითვალისწინეთ

https://api.next.insight.optio.ai/api/docs/analytics არის API-ის Swagger-ის მისამართი. Swagger-ი გამოიყენება API-ის დოკუმენტაციის წარმოებისთვის და სატესტო რექვესთების გაშვებისთვის.

უშუალოდ API სერვისის მისამართია: https://api.next.insight.optio.ai

დოკუმენტაციის ამ ნაწილში აღწერილია ორი ენდპოინტის მისამართი:
image

Swagger-ის მისამართმა არ დაგაბნიოთ. საბოლოო ჯამში ენდპოინტების მისამართები უნდა გამოვიდეს:

@VeronikaMi
Copy link

გამარჯობა, /…/facts/find - ს რომ ვაწვდი სორტირებისთვის "sortBy": "dimension", ამ შეცდომას ვიღებ:
{
"statusCode": 400,
"message": "search_phase_execution_exception: [query_shard_exception] Reason: No mapping found for [dimension] in order to sort on"
}

სხვა ველებზე სორტირება მუშაობს

@GiorgiRusieshvili
Copy link

აღდგომების გამო დედლაინი ხომ არ გადაწეულა? )

@davidgabrichidze
Copy link
Author

@GiorgiRusieshvili დედლაინი აღდგომის დღეების გათვალისწინებით დავდეთ თავიდანვე ^^

@davidgabrichidze
Copy link
Author

@VeronikaMi მადლობა, გავასწორეთ ხარვეზი

@VeronikaMi
Copy link

👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment