Create a package_metadata table to support package tags and additional attributes

Summary

Currently, packages are stored in the packages_packages table. We do not have a column to handle attributes like dist_tags for NPM(npm install package_name stable) or other packages that support tags or additional arguments other than version.

Improvements

Since a version can have multiple tags, we should consider adding a PackageMetadata model so the attributes can be assigned to other packages.

Taking NPM as an example, a package can have many dist_tags, class_name: PackageMetaTag, foreign_key: :'tag_id'

  1. Resolve packages by specifying tags instead of only versions
  2. We can store other metadata for other packages, which will also give us access to additional dependencies

Risks

Involved components

Packages

Optional: Intended side effects

Optional: Missing test coverage

Edited by Sara Ahbabou