SaaS [dbbuilder] Generator-instancji + procedura tworzenia

Materiały / linki

Proces rejestracji

Step 1

Wybór cennika

zapamiętujemy liczbę użytkowników

  • hosting_users_max
  • hosting_promo_code
    • 2021STANDARD
    • 2021PREMIUM

Step 2

Wprowadzenie formularza

  • hosting_domain (nazwa instancji,string between 4 and 20 characters) wysylamy calosc czyli nazwa.platformaerp.com , alpha numeric lowercase string between 4 and 20 characters
  • hosting_promo_code (wprowadzamy tutaj np 2021STANDARD + musi zawierac pa2020 )
  • hosting_users_max z poprzedniego kroku
  • hosting_email (email)
  • hosting_vat (nr nip firmy) na tej podstawie wypelniamy uzywajac api z kontrahentow
    • hosting_company
    • hosting_city
    • hosting_country
    • hosting_street (razem z numerem ulicy)
    • hosting_postal_code
  • hosting_first_name
  • hosting_last_name
  • hosting_agreement_subscription
  • hosting_agreement_privacy
  • musi byc widoczna cena i ilosc uzytkownikow

Step 3

System wywolanie api

  1. 'https://paanda.io/api/hosting/signup/{hosting_domain}

https://localhost/api/hosting/confirm/25dc2f30-b5ca-827f-0f70-48d9674ec947

TEST

http://localhost/api/hosting/signup/{hosting_domain}

{

"hosting_domaine":"platforma",

"hosting_promo_code":"2021STANDARD pa2020",

"hosting_users_max ":10,

"hosting_email":"marcin@kotynia.com",

"hosting_vat":"7272351852"}

Step 4

uzytkownik

uzytkownik: potweirdza link który otrzymuje

  1. https://paanda.io/api/hosting/signup/confirm/{hosting_uuid} przekeirowuje od razu na instancje

step 5

system

  • znajduje pierwsza wolna instancje z tabeli [dbo].[hosting_instance]
    przepisuje do hosting
  • tworzy szyfrowany dsn i umieszcza w dsn
  • odpala skrypt erp.instance_confirm i przekazuje dane z tabeli hosting (tutaj moze byc) zalozenie kontrahenta dokonfigurowanie rzeczy ktore wyamgaja wiesdzy jaka firma

Szukanie wolnej wygenerowanej instancji , uzupelnienie

SELECT [hosting_uuid]

FROM [platforma-api].[dbo].[hosting]

where hosting_status =0

-- hosting_status =1 instancja zajeta

---- dodanie przygotowanej instancji do oczekiwania na pobranie

insert into hosting_instance

(hosting_instance_db,hosting_instance_server)

values

('test2','s01.platformacrm.pl')

DBBUILDER Tool do tworzenia instancji

stworzyc repozytorium generator-instancji

  1. \apliakcja\app
  2. \apliakcja\paanda-db >> pobieramy recznie kod bazy z repozytorium dla paandy
  3. \apliakcja\platforma-db >>pobieramy recznie kod bazy z repozytorium dla platformaerp

Wymagania

  • connection w konfiguracji
  • parametr ilosc instancji do zalozeniea by default 10
  • sciezki do repozytorium paandy zapisane w appsettings
  • sciezki do repozytorium platformy zapisane w appsettings
  • w petli to moze dzialac co minute

Kroki automatu

  • 0. sprawdzamy ile jest instancji jezeli mneij niz 10 to dodajemy 10

--zakladamy ze co najmniej 1 wpis zawsze jest

--zwraca ilosc isntancji

SELECT count(*)

FROM [platforma-api].[dbo].[hosting_instance]

--STRUKTURA hosting_instance_db,hosting_instance_server

  • Pobieramnie nazwy ostatniej bazy danych ( paanda00001 > paanda00002)

SELECT hosting_instance_db

FROM [platforma-api].[dbo].[hosting_instance]

order by 1 desc

  • 2. na podstawie nazwy zakładamy baze danych
    • sprawdzamy czy baza istnieje - double check
    • create database…. na koncu dodajmy wpis potweirdzajacy ze abza zalaozona punkt 7
  • 3.odpalenie skryptow platforma, paanda
    • stworzenie schematow
    • kolejnosc > tabel > widok > funkcje > procedury ….
  • 5. przygotowanie skryptow Michał Derbin (procedury)
    • configuration.configuration > configuration.configuration_setup
    • document.documenttype > document.documenttype_setup
    • common.dictionary > common.dicitonary_setup
    • dbo.columns > dbo.columns_setup
    • trzeba bedzie zsnychronizowac kod zrodlowy bazy platforma z wzorem (zeby pojawily sie skrypty)
  • 6. uruchomienie skryptow szukamy procedury ktore koncza sie na setup ……. *_setup
    • wyszukac z widokow systemowych
    • uruchomienie kazdej osobno
  • 7. dodanie do [dbo].[hosting_instance] nazwa zalozonej hosting_db, hosting_server

insert into hosting_instance

(hosting_instance_db,hosting_instance_server)

values

('paanda00002','192.168.0.200')

  • marcin 8. WWW 6. dopiero jak uzytkownik potwierdzi wtedy
    • dodaje sie kontrahent
    • ustawia sie np instance.sales.seller na id kontrahenta
  • 8. wyswietlenei na ekranie i zapisanie do pliku tekstowego osobno dla kazdego wywolania
    • NAZWA PLIKU \log\20210101_1212_PAANDA0001.LOG

[OK ] 20210101-121230 DB START:: PAANDA001

[OK ] 20210101-121230 /functions/xmltotable.sql

[SKIP] 20210101-121230 /functions/xmltotabl1111.sql

[ERR ] 20210101-121230 /functions/xmltotabl2.sql

ERROR MESSAGE sadsadsadsadsadsadsadsadsaddsaasdsadasdas

  • 9. obsługa PRIORYTETÓW priorytety.txt

domyslnie priorytet 10

5 ims.GetPelnaNazwa.sql #KOMENTARZEJRIUEWHIURHEWIUHRIUEWHRIUHEWRIU

0 ims.umowy_get.sql #tO bedize wylaczony polik

  • 10. na koncu do logu czas trwania całej operacji zakłądanai jednej instancji

Kroki tryb manual

  • app.exe --dbname nazwabazydanych --dsn Data Source=192.168.8.200; User ID=ffff;password=“ --scripts C:\git\paanda-db;C:\git\platforma-db
  • parametry pobieramyu z linii komend jelsi ich nei ma z app.config
    - jezeli w argumentach jest dbname w tedy z skrytpow tworzy sie baza o takim dbname
    -nigdzie nei dodajemy wpisow twrozymy instancje zapisujemy do loga wychodzimy

Uwagi:

  • Przy starcie programu informacja : nazwa + do czego sluzy + parametry wymagane
    PAANDA DBBUILDER 1.0 ( pobrac numer z assembly)
  • W kodzie zrodlowym defaultowy plik app.config z przykladowymi wartosciami bez usernamem password
  • jak najmneij ustawiwania programu czyli priorytety.txt czytamy z lokalizacji proramu ( env.ApplicationBasePath;)

Skryptowanie danych

Skrypt powinien

  • miec xml w ktorym sa dane i insert
  • sprawdzanie czy juz nei zostalo dodane

select * from common.dictionary row FOR XML auto,ELEMENTS

select

[dictionaryID], [dictionaryName], [dictionaryKey],

[dictionaryKeyGuid], [dictionaryValue],

[dictionaryUrl], [dictionaryOrder],

--[dictionaryXML],

[dictionaryDefaultValueInGroup], [dictionaryMasterKey],

--[groupID], [addDate], [addUsername], [modDate], [modUsername],

[status], [colorCode], [isSystem],

--[fullTextID],

[attrValRelatedItem], [attrValRelatedPrice], [accounting], [translate],

[decimalValue], [lastStep], [remotesource], [textValue]

--[translationIDChecksum]

from common.dictionary row FOR XML auto,ROOT('rows'), ELEMENTS