Aktywne Wpisy
szklarskaporeba +638
#korposwiat #pracbaza #big4 Młode roczniki są bardzo śmieszne. Dzisiaj '99 podszedl na open space do managera i powiedział ze albo pierwsze dwa tygodnia listopada będzie mieć wolne a potem home working do końca roku albo jutro rzuca wypowiedzenie xD. Pulsujących zawołam jutro z rozwinięciem sytuacji.
timeofthe +28
#famemma fakty są takie że z pewnością wykopki pisały gorsze rzeczy na 6 obcy czy asku niż połowa oskarżonych na Pandora gate xd obrońcy moralności oglądający patologię. Dziwne że taki wardega nie jest ciśnięty za boobs mana
Cały projekt składał się w zasadzie z trzech części, panelu administracyjnego dostępnego przez przeglądarkę, aplikacji mobilnej będącej jednocześnie aplikacją konsumencką i uproszczonym panelem administracyjnym oraz quasi-restowego api zajmującego się komunikacją z MySql'ową bazą danych. API było trochę upośledzone (pomijając brak dokumentacji), ponieważ akceptowało tylko requesty typu GET z czego wynikło później trochę problemów.
Nie miałem szansy pracować przy aplikacji mobilnej, ale w serwisie webowym napisanym w #php występowała klasa ApiRequest (też nie udokumentowana) z szeregiem (prawie setką) funkcji (które czasami się dublowały, ponieważ, jak przypuszczam, ktoś dopisywał brakującą funkcję nie sprawdzając czy już taka istnieje) dających nam możliwość interakcji z bazą danych. Przykładowo prosty select wyglądał tak:
$apiRequest->select("products","price$10","id|name")
co przekładało się na:
SELECT id, name FROM products WHERE price = 10
Znak '$' oznaczał '='.
W tym przypadku nie widziałem nic niepokojącego, ot taka konwencja. Problemy zaczęły się kiedy okazało się, że projektant klasy ApiRequest uznał, że znak '@' będzie idealny do zastąpienia sql'owego 'LIKE'.
Miałem za zadanie zrobić formularz do odzyskiwania hasła sprawdzając wcześniej czy podany email jest w bazie. Możecie sobie wyobrazić co się działo.
$apiRequest->select("users","email$przykladowy.email@gmail.com","*")
dawało
SELECT * FROM users WHERE email = przykladowy.email LIKE gmail.com
Spytałem programisty co z tym robimy. Stwierdził, że nie ma sensu przerabiać klasy, bo "@" jest już użyta zbyt często, a on nawet nie wie gdzie. Miałem obcinać mail o domenę oraz @ i sprawdzać czy w bazie jest email, podobny do tego co pozostało.
W jeszcze ciekawszy sposób rozwiązano projekt same bazy danych. W bazie były promocje oraz produkty, promocja mogła obejmować wiele produktów, a jeden produkt mógł być obecny w wielu promocjach, klasyczna relacja many-to-many. Tutaj zamiast stworzyć jakąś pośredniczącą tabelę, zdecydowano się w tabeli promocje dać kolumnę typu varchar przechowującą łańcuch id'ków wszystkich produktów objętych promocją, oddzielonych przecinkami lub średnikami (nikt nie widział od czego to zależało). Poznanie produktów objętych daną promocją nie było w zasadzie trudne. Wyciągało się ten łańcuch id'ków i dzieliło według średnika (lub przecinka), a potem wyciągało dany produkt pojedynczo z bazy po id. Problemy pojawiły się kiedy okazało się, że dany produkt jest objęty daną promocją w pewnej ilości np. 1000 sztuk. Dana promocja miała teraz kolumny: amounts w postaci '100;200;300;' oraz product_ids '4;2;3;'. Przyjmijmy, że ktoś zakupił 20 sztuk produktu o id 3. Najpierw należy poznać miejsce id produktu w łańcuchu, następnie wyciągnąć cały amounts, wyciąć wartość będącą na tym samym miejscu co id, pomniejszyć ją o odpowiednią ilość, połączyć string z powrotem, a na koniec zaktualizować promocję.
Wspominałem wcześniej, że API jest upośledzone, ponieważ akceptuje tylko requesty typu GET. Osobiście nie miałem z tym żadnych problemów, ale kolega student walczył z pewnym formularzem, który był bardzo obszerny, a jego dane po prostu nie mieściły się w gecie. Modyfikacja API nie wchodziła w grę, więc postanowił, że podzieli dane i wyśle tyloma requestami iloma zajdzie potrzeba.
Na razie tyle.
Od teraz każdy kolejny wpis będzie się ukazywał pod #januszeit