Как я в 15 лет написал интернет-магазин

Я заинтересовался программированием в 5-том классе. У меня в школе был кружок по HTML. Я туда пошел, походил, потом заболел, пропустил несколько уроков. Мы дошли до таблиц и я уже не смог догнать программу.

Но в 7-ом классе во втором семестре мы уже должны были учить HTML по школьной программе. И я снова очень заинтересовался сайтами. Стал смотреть видео типа «CSS за час». И уже через несколько месяцев, когда дети делали это:

005b083f63e4c815be058bc5812a067f.png

Я делал это:

6bf7b27cf7d96a7aed267c09fc8375b5.png

Тут даже есть JS. Сверху можно менять тему. И она сохраняется в LocalStorage.

Потом папа нанял учителя и я стал делать такое:

24c5a2fd841520a271e05ae88c37e99e.png

Выучил flexbox, grid. Но эти сайты были никому не нужны, то есть их никто не использовал.

Но тут, каким-то чудом появилась возможность написать сайт про Модель ООН для детей. Там должна была быть возможность зарегистрироваться на модель и с админки принимать или отказывать человеку.

По советам учителя, была выбрана CMS Modx. Тогда я не знал вообще, что такое база данных, SQL, да и вообще умел просто верстать страницу с минимальным JS. Многому меня научил учитель, но многое пришлось учить самому. В modx можно писать сниппеты на PHP.

96d1ef2b6eb4e010b0385a675e7c59ae.png

Такое получилось. Это конечно было коряво. SQL таблицы у меня были не связаны, я знал только базовые SELECT, UPDATE и DELETE. И при входе в аккаунт, пользователя не сохраняло после закрытия браузера.

6cc622a6c66a90370c0a2a5a7f16a3c3.png

Но для меня это был уже большой прогресс.

Был еще школьный проект, нужно было написать сайт, написал сайт про школу, там сделал закачку изображений на сайт и парсил школьное расписание с основного сайта.

Далее был проект написать сайт, на котором было меню ресторана. И его нужно было изменять через админку. Он тоже был на modx и использовал PHP.

Список продуктовСписок продуктовИзменение продуктаИзменение продукта

В последний момент, когда уже показывал работу, оказалось, что я при изменении продукта забыл дописать WHERE id = … И изменялись все продукты.

Потом был еще один сайт, но он был просто страничкой без интерактива (просто CMS Modx без ничего), выучил только как делать многоязычие в modx.

Затем вышел год прокрастинации:)). Вообще я участвовал в проекте Italent.

Но, учитывая, то что у меня намечалось еще много проектов, родители решили меня перевести в дистанционную школу на экстерн, где нужно сдать всего две контрольные в год по предмету и на них дается 24 часа.

Мой папа занимается автоматизацией магазинов и ресторанов. В конце лета 2020 года заказ поступил из сети магазинов мяса. Нужно было написать программку для автоматизации процесса выдачи зарплаты. У каждого сотрудника была ставка за день и раз в неделю выдавали заплату. Каждый день нужно было прийти и через интерфейс программы моего папы «открыть» день с помощью считывателя магнитных карт. Каждая карта имела код и он был привязан к сотруднику.

В программе нужно было показывать отчеты по магазинам и по сотрудникам (сотрудник мог работать в двух магазинах за день, есть магазины, которые находятся через дорогу друг от друга). Если сотрудник пришел позже открытия магазина или раньше закрытия, то строку нужно было подсветить красным.

Цель была найти такую платформу, где можно просто перетаскивать из тулбокса элемент на форму, потому, что писать команды типа: form.add_button () — это сложно и долго.

Из вариантов нашел PyQt, но он у меня вообще не запускался. Поэтому выбор пал на С#(winforms). Тогда выбрал .NET Framework, не знал тогда, в каком направлении движется Microsoft.

Использовал DataSet (xds) и там указывал SQL запрос.

7dcf591f23a9ede78dbdea63dfc2f27a.png

Вот структура базы:

7f7ad6863a8498fccff1ba080b177f8d.png

Я выучил, что такое joins в sql, хранимые процедуры, views, немного узнал о C# да и вообще много чего.

Проект закончил.

Решил попробовать переписать папину программу. Узнал про технологию WPF. Решил писать на ней, потому, что WinForms уже устарела и у WPF больше возможностей. Ну и выбрал уже .NET Core (.NET 5). Сырой SQL мне уже не нравился, прочитал про ORM Entity Framework. База данных была MS SQL Server.

БазаБаза

Научился делать экспорт в Excel. Выучил UniformGrid в WPF. Этот список можно продолжать очень долго…

В декабре 2020 года оказывается, что у сети магазинов, для которой я писал программу, есть интернет-магазин на Bitrix, и они с ним мучались. Это все работало так:

Человек оформлял заказ, он поступал в программу битрикса, оператор видел заказ, смотрел адрес, заходил в Google Maps, искал адрес, куда человек заказал и определял, какой магазин ближе, звонил в этот магазин и диктовал заказ, а кассир в магазине его вводила в программу, с ФИО и номером телефона, а ведь легко можна ошибится.

Конечно же, с увеличением заказов ставало еще сложнее. Возникла идея написать сайт с нуля с автоматической отправкой на магазин в программу папы. Магазин нужно было привязать к адресам. В моем случае это были улицы Киева и еще несколько городов. Причем магазин мог отказаться от заказа и он мог отправится на другой магазин.

Пообещал написать сайт, а я в душе не знал как такое писать. Раз уже изучил C#, легче всего было на нем и писать, так и сделал. Выбрал ASP.NET Core.

Также нужна была программа для оператора, где можно изменять продукцию, смотреть заказы и если магазин отказался, то выбрать магазин. Для программы все также, как и к прошлой, но решил что надо Entity Framework Core, сразу была проблема, там оказывается нужно самому писать Include связанных объектов, когда Entity Framework делал join всех связей автоматически.

Планировалось еще сделать редактор страниц, чтобы пользователи могли сами редактировать их. Я его сделал, но в итоге заполняю сам.

Ну и началось. Купил книгу по основам ASP.NET Core, Blazor Components и WPF, стал писать элементарщину. Узнал про паттерны проектирования (MVC, MVVM).

Стал писать, не получалось ничего. Все было сложно и не работало. Потом понемножку написал корзину и справочники в программе. Так и написал сайт.

Потом другие магазины мяса тоже захотели себе сайты, пришлось сделать таблицу с настройками, для каждого индивидуальными.

Еще клиенты попросили сделать статистику. Выучил как рисовать графики в WPF.

Было еще много проблем. Изначально не закладывалась возможность заказа без регистрации, а это необходимая функция, пришлось попотеть.

Было еще колесо фортуны с продуктами. Мне нужно было из JS, по окончании кручения, вызвать C# событие, сделал его статическим, поскольку его было легче вызвать из JS, а о последствиях не задумался. Колесо запустил с 10 до 11 утра. Выиграть можно было много, и народа налетело… Много человек одновременно заказывали. И, когда крутилось колесо, к примеру, у трех человек, то когда у первого докручивалось, сайт записывал подарок в базу и показывал поздравление, но поскольку событие статическое, то оно вызывалось на всех трех колесах и записывало три подарка одному человеку, а поздравление показывало всем.

7046bbbe2216e4fb71d9970f737e6d65.png

Вспоминаю это время с ужасом! Пришлось потом вручную подарки в базе менять.

Итог

За это время я многому научился. Когда я хотел переписать папину программу (я ее не забросил), то мотивация со временем пропала. Когда же писал интернет-магазин, то пообещал сделать то, что не умел, но это очень увеличило мою мотивацию, и поскольку не хотелось подвести, я учил все очень быстро, можно сказать включил turbo boost!

Мне еще есть куда стремиться, паттернами, к примеру, у меня в коде даже не пахнет. Надо когда-нибудь выкинуть этот сайт и написать заново. Интересно, какие проекты меня ждут в будущем?

Но мои интересы — это не только программирование, а также монтаж видео (мой канал) и многое другое. Я еще не определился, кем я буду, но все-же думаю, что что-то связанное с программированием.

Спасибо за прочтение моей статьи!

© Habrahabr.ru