Ben c1c9ea5c4d Merge branch 'master' of https://github.com/benkyd/LegoLog
Former-commit-id: dade809ccf8815ff0c5f25fc383c4d55b7a849ad
2022-02-03 18:59:26 +00:00
2022-02-03 18:55:09 +00:00
2022-02-03 18:57:00 +00:00
2022-01-24 01:09:37 +00:00
2022-01-31 20:33:08 +00:00
2022-02-03 18:57:00 +00:00
2022-02-03 18:55:09 +00:00
2022-02-03 18:57:00 +00:00
2021-10-21 13:05:39 +01:00
js
2022-02-03 18:59:10 +00:00
js
2022-02-03 18:59:10 +00:00
2022-02-03 18:57:00 +00:00

# LegoLog - A lego catalouge for you Submitted for the Application Programming coursework of 2021/22

TODO

[ ] Redo logging system [X] Simple templating library setup for the client [ ] Add variable templating - see TODO [ ] Webserver [ ] CDN [ ] Database

Resources / Notes

Web design (i hate web design)

Usable shop design

Databases

Documentation & Implementation Rationale

Make sure to see docs/ for more detailed module documentation

IMPORTANT MAKE SURE TO READ CONFIGURATION.md BEFORE RUNNING

1.1 Content Delivery and Storage of Thousands of Images

Due to the fact that there is ~85000 images of individual lego bricks and even more of sets. I have chosen not to store them in a database as a BLOB or anything else like that as it is inefficient. I am also aware of the pitfalls of a conventional filesystem for storage of mass data.

The way I have approached a solution for this is in preprocessing, by hashing the name of the image file (which is also the brick / set in question), I can then use the filesystem's natural directory cache speedyness to speed up access times significantly.

Take the file name 2336p68.png, which is a Lego "Cockpit Space Nose", after a simple MD5 hash, the result is:

"d2ef319ea58566b55070e06096165cb8"
 ^^^^

Using the first four characters in the hash, we can allocate images into buckets for storage and quick retreval. This acts very similar to a hash table implemented in the filesystem.

Also due to the non-ability to use subdomains during this project, all content served like this will use the API suffix, cdn/

This implementation description does not take into account resource cacheing.

1.2 Database Storage of the Pieces of a Set

Because I am using a bloody RELATIONAL database, I cannot simply store all of the pieces in a set, in that set without serialising it. So that's what I did, sets have a JSON field of IDs and amounts for the easy retrieval of the pieces used in a lego set, unfortunately this reduces the easyness of using fancy SQL joins to get the piece from that.

My other option for this was to have a seperate table which includes relationships, for example, there could be a set|piece|number column however, there would be not much room for a primary key in that case, unless some hashing of sets/pieces went on. We will see how I approach this.

Acknowledgements

The MIT Permissive Software License can be found in LICENSE

Copyright 2021/22 Benjamin Kyd

Description
No description provided
Readme MIT 55 MiB
Languages
JavaScript 83.3%
HTML 8.4%
CSS 7.9%
GLSL 0.4%