Skip to content

Instantly share code, notes, and snippets.

@davidgabrichidze
Last active January 8, 2024 01:10
Show Gist options
  • Save davidgabrichidze/ab28ed75521d17455e37df235997319e to your computer and use it in GitHub Desktop.
Save davidgabrichidze/ab28ed75521d17455e37df235997319e to your computer and use it in GitHub Desktop.
Banners Management Module

📃 სტაჟირება Optio-ში / ოქტომბერი 2023

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

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

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

🧐 ტექნიკური აღწერა

იმისათვის, რომ მარკეტინგის გუნდის თანამშრომელმა ადვილად შეძლოს ბანერის განთავსება, მობილური და ინტერნეტ ბანკინგის ინტერფეისი დაყოფილია ლოგიკურ ზონებად (მაგ. Header, Right Sidebar, Footer, Main Hero Slider, და სხვა). ბანერის დამატებისას, ამ ზონებიდან ერთერთი აუცილებლად უნდა მივუთითოთ ჩანაწერს.

ბანერის ჩანაწერის ველები ქვედა ცხრილშია აღწერილი (”*” სიმბოლოთი აღნიშნულია აუცილებელი ველი):

სათაური მონაცემთა ტიპი აღწერა
id string ჩანაწერის უნიკალური იდენტიფიკატორი. API-ს შეგიძლია გადმოსცე შევსებული ან ცარიელი. API შეეცდება იპოვოს გადმოცემული მნიშვნელობით ჩანაწერი და თუ იპოვა განაახლოს ის, თუ ვერ მიაგნებს შექმნის ახალ ჩანაწერს
name* string ბანერის სათაური, რომელსაც მომხმარებელი საკუთარი სურვილისამებრ არქმევს
channelId* string ჩამონათვალი განსაზღვრავს, თუ რომელი საკომუნიკაციო არხისთვისაა განკუთვნილი ეს ბანერი
language* string გამომდინარე იქიდან, მომხმარებელს რა ენა აქვს არჩეული, ბანერიც შესაბამის ენაზე უნდა გამოუჩნდეს.
zoneId* string UI-ს ლოგიკური ზონა, რომელშიც გამოჩნდება ეს ბანერი
priority* number პრიორიტეტულობის ინდექსი გამოიყენება ბანერების სორტირებისთვის. მაგალითად, თუ ერთ ლოგიკურ ზონაში რამდენიმე აქტიური ბანერია, ეს ინდექსი დაალაგებს მათ მიმდევრობას სლაიდერში.
fileId* string ფაილის იდენტიფიკატორი, რომელიც იქმნება ფაილის ატვირთვის შემდეგ. ამავე იდენტიფიკატორით მოხდება ფაილის წაკითხვა API-დან (იხ. Blobs API ქვემოთ).
url* string ეს ბმული გამოიყენება მომხმარებლის გადამისამართებისთვის ბანერზე დაკლიკვის შემდეგ.
startDate* Date თარიღი, რომლის შემდეგაც ბანერი ითვლება აქტიურად და უნდა გამოჩნდეს მობილურ და ინტერნეტ ბანკინგში.
endDate Date თარიღი, რომლის შემდეგაც ბანერი აღარ უნდა გამოჩნდეს მობილურ და ინტერნეტ ბანკინგში.
active* boolean ამ ველით მაკერტინგის გუნდის თანამშრომელს შეუძლია სწრაფად გააქროს ან გამოაჩინოს ბანერი. ამ ველს ბანკის თანამშრომლები იმ შემთხვევაში იყენებენ თუ მოულოდნელად აღმოაჩინეს რაიმე ხარვეზი და თარიღების ცვლილების ნაცვლად, სწრაფად უნდა “გამორთონ” ან “ჩართონ” ბანერი.
labels string[] ბანკში რეგისტრირებულ თითოეულ კლიენტს მინიჭებული აქვს ე.წ. ტეგი, ლეიბლი, რომელიც განსაზღვრავს მის სეგმენტს. მაგალითად: Payroll, Social, Affluent, და ა.შ. აქ ეთითება ერთი ან მეტი სეგმენტი, რომლებისთვისაც არის განკუთვნილი ეს ბანერი. თუ ველი ცარიელია მაშინ ითვლება, რომ ბანერი ყველა მომხმარებლისთვისაა აქტიური.

👉 Optio-ს Banners API-ში შეხვდები კიდევ ერთ ველს, isCorporate, თუმცა ის არ გამოიყენება ამ ამოცანაში და არ მიაქციო ყურადღება

📋 ბანერების სიის გვერდი

  • შექმენი გვერდი, რომელიც აჩვენებს სიას Optio-ს Banners API-ს გამოყენებით
  • გამოაჩინე ინფორმაცია ბანერის შესახებ: სურათი, სათაური, სტატუსი, ზონა, დაწყება-დასრულების თარიღები, ლეიბლები.
  • შესაძლებელი უნდა იყოს სიის გადაფურცვლა (Paging) და სორტირება
  • მომხმარებელს ასევე უნდა შეეძლოს გაფილტვრა ტექსტით

🗒️ ბანერის რედაქტირების ფორმა

  • დამატებისა და რედაქტირებისთვის გამოიყენე ფორმა, რომელიც გამოჩნდება მარჯვენა მხარეს ე.წ. Drawer-ით
  • რედაქტირებისთვის საკმარისი უნდა იყოს სიის ჩანაწერზე დაკლიკვა
  • მომხმარებელმა უნდა შეძლოს სურათის ატვირთვა, სახელის დარქმევა, ზონის არჩევა, სტატუსის მინიჭება, დაწყებისა და დასრულების თარიღების მითითება, კლინეტების ლეიბლების მონიშვნა. სურათების ასატვირთად დაგჭირდება Optio-ს Blobs API.
  • ზონებისა და კლიენტების ლეიბლების შესაძლო მნიშვნელობების ჩასატვირთად დაგჭირდება Optio-ს Reference Data API.

🛠️ Optio API დოკუმენტაცია

Banners API

Optio-ს API CRUD ოპერაციებისთვის ამ მეთოდებს იყენებს:

  • find - მრავალი ჩანაწერის მოძიება
  • find-one - ერთი ჩანაწერის წაკითხვა
  • save - ერთი ჩანაწერის შექმნა ან/და შენახვა, დამოკიდებულია იმაზე, თუ რა ეწერება გადმოცემულ id ველში.
  • remove - ერთი ჩანაწერის წაშლა

აღსანიშნავია, რომ ინფორმაციის წაკითხვის მეთოდებს აქვთ შესაძლებლობა გამოითხოვო კონკრეტული ველები. ამისთვის გამოიყენება include და exclude პარამეტრები. მაგალითად თუ include-ს გადასცემ მასივს [’id’, ‘name’] მხოლოდ ეს ორი ველი დაბრუნდება სერვერიდან.

API-ს დეტალური დოკუმენტაცია შეგიძლია იხილო Swagger-ით, ამ ბმულზე: https://development.api.optio.ai/swagger/banners

Blobs API

ბანერში სურათის ატვირთვისთვის გამოიყენება Blobs API და პროცესი ორ ეტაპიანია:

  1. სურათი უნდა ატვირთო /api/v2/blob/upload მეთოდის გამოყენებით, რომლის რეზულტატშიც იქნება მითითებული ფაილის იდენტიფიკატორი
  2. ეს იდენტიფიკატორი უნდა შეინახო ბანერის fileId-ი ველში

ენდპოინტი multipart/form-data-ს იყენებს და ფაილის მონაცემებს ელოდება blobs ველში.

ატვირთვის მაგალითი FormData-ს გამოყენებით:

...
upload(image: File) {
    const formData = new FormData();

    formData.set('blob', image);

    return this._httpClient.post(
      [ENDPOINT_URL_HERE],
      formData,
    );
  }
...

რაც შეეხება სურათის ჩამოტვირთვას და ჩვენებას, ამისთვის უნდა გამოიყენო /api/v2/blob/{id} მეთოდი, სადაც {id}-ში ჩაწერ fileId-ის მნიშვნელობას.

API-ს დეტალური დოკუმენტაცია შეგიძლია იხილო Swagger-ით, ამ ბმულზე: https://development.api.optio.ai/swagger/blobs

Reference Data API

ამ უნიფიცირებული API-ს გამოყენებით შესაძლებელია სხვადასხვა ჩამონათვალის გამოთხოვა მონაცემთა ბაზიდან. ჩამონათვლის იდენტიფიცირება ხდება typeId-ი ველის საშუალებით, რომელიც /api/v2/reference-data/find-ს გადმოეცემა payload-ით. ამ ამოცანისთვის გჭირდება ოთხი ჩამონათვალი:

  • საკომუნიკაციო არხები - typeId:1600
  • ზონები - typeId:1700
  • ლეიბლები - typeId:1900
  • ინტერფეისის ენები - typeId:2900

⚠️ გაითვალისწინე: Banner-ის ჩანაწერის შესაბამის ველში უნდა ჩაწერო key ველში არსებული მნიშვნელობა, მომხმარებელს კი უნდა უჩვენო name ველის მნიშვნელობა.

API-ს დეტალური დოკუმენტაცია შეგიძლია იხილო Swagger-ით, ამ ბმულზე: https://development.api.optio.ai/swagger/reference-data

💅 UX/UI პრინციპები

  • UI-ის ასაგებად გამოიყენე მხოლოდ Angular Material-ის კომპონენტები.
  • უზრუნველყავი სუფთა და ინტუიტიური დიზაინი.

🔥 ბონუს საკითხები

ქვემოთ ჩამოთვლილია დამატებითი ტექნოლოგიები და პირობები, რომელთა შესრულება არ არის აუცილებელი, თუმცა ჩაითვლება უპირატესობად ნამუშევრების შეფასებისას:

  • NGRX-ის გამოყენება სთეითის მართვისთვის
  • გვერდის დარეფრეშებისას სიის მდგომარეობის შენარჩუნება (ფილტრი, სოტირება, გვერდი, მონიშნული ჩანაწერი)
  • Unit Test-ები
  • README

🔓 ავტორიზაცია:

ჩვენი API ითხოვს ავტორიზაციას, რისთვისაც მოგაწვდით Bearer Access Token-ს სარეგისტრაციო ფორმის შევსების შემდეგ.

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

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

🏢 ოპტიოს შესახებ

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

ამ მიზნის მისაღწევად შექმნილ CDP-ში გამოიყენება მოწინავე ტექნოლოგიები: Big Data, Machine Learning, NLP, MicroService Architecture, Business Process Automation, Data Enrichment და სხვა მრავალი.

მთლიანობაში ჩვენი ტექნოლოგიური სტეკი მოიცავს: Angular, NodeJS, Python, ElasticSearch, Redis, RabbitMQ. პერიოდულად გვიწევს MS SQL, Oracle, MongoDb, dotnet core ტექნოლოგიებთან და სხვა მრავალ სისტემებთან მუშაობა და ინტეგრაცია.

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

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

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

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

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

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

⚠️ შესრულებული ამოცანის მოწოდების ბოლო ვადაა 20.10.2023 23:59:59. ამოცანა ატვირთე github-ზე და რეპოზიტორის ლინკი შენს CV-სთან ერთად გამოგვიგზავნე ელფოსტაზე hr@optio.ai სათაურით Optio Internship Oct 2023 - ${YOUR_NAME_HERE}

⚠️ ⚠️ არ დაგავიწყდეს სარეგისტრაციო ფორმის შევსება რათა გამოგიგზავნოთ Access Token.

🎉 წარმატებები! 🎉

@davidgabrichidze
Copy link
Author

@GiorgiZanqaidze მივიღეთ, მადლობა

@PLASTICPEO
Copy link

api გათიშეთ ?

@davidgabrichidze
Copy link
Author

@PLASTICPEO არა, მაგრამ ჩელენჯის დრო გავიდა და შეიძლება ტოკენებსაც გაუვიდათ ვადა

@SousouBer
Copy link

გამარჯობა,
მომდევნო ჩელენჯი გაზაფხულზეც დაიგეგმება?

@davidgabrichidze
Copy link
Author

@SousouBer , გამარჯობა,

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

გამოგვყევი LinkedIn-ზე და Facebook-ზე, აქ ვდებთ ხოლმე ჩელენჯებს.

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