Ferreteria/modules/files/rf node: Difference between revisions

From Woozle Writes Code
Jump to navigation Jump to search
No edit summary
(internal/external filespecs tracked separately)
Line 7: Line 7:
** This is related to [[FileFerret/SQL/entry]], but not the same; that system tracks user-managed files.
** This is related to [[FileFerret/SQL/entry]], but not the same; that system tracks user-managed files.
** Wrinkle I'm still working out: this actually needs to track two different representations of the file -- one for how to retrieve it from the native filesystem, and the other by which it will be represented to the user. There are issues to consider.
** Wrinkle I'm still working out: this actually needs to track two different representations of the file -- one for how to retrieve it from the native filesystem, and the other by which it will be represented to the user. There are issues to consider.
==Fields==
* '''IFSpec*''': These are related to where the file is actually stored in the filesystem. They are not exposed to non-admin users unless direct access is desired (no security). It should be optimized for access time or whatever metrics are prioritized:
** '''IFSpecName''': this node's name as known to the filesystem
** '''IFSpecFull''': full filespec to this node (including name) from repository base spec
** '''ID_IFParent'''
* '''OFSpec*''': These are related to the hierarchy that is exposed to the user:
** '''OFSpecName''': name by which the user knows the node (how it's displayed)
** '''OFSpecFull''': full path to this node (including name) from external URI base
** '''ID_OFParent''': parent node as seen by user
==History==
==History==
* '''2017-07-22''' created for reworking file-management
* '''2017-07-22''' created for reworking file-management
* '''2017-07-24''' moved from [[VbzCart]] to Ferreteria (RepoFerret module); renamed from '''fm_node''' to '''rf_node'''
* '''2017-07-24''' moved from [[VbzCart]] to Ferreteria (RepoFerret module); renamed from '''fm_node''' to '''rf_node'''
* '''2017-07-25''' decided to try having separate internal and external filespec; rearranged stuff
==SQL==
==SQL==
<mysql> CREATE TABLE `rf_node` (
<mysql> CREATE TABLE `rf_node` (
   ID        INT          NOT NULL AUTO_INCREMENT,
   ID        INT          NOT NULL AUTO_INCREMENT,
   ID_Parent INT          DEFAULT NULL,
   IFSpecPart VARCHAR(255) NOT NULL COMMENT "relative filespec - the part of the path from parent to this file/folder",
  FSpecPart VARCHAR(255) NOT NULL COMMENT "relative filespec - the part of the path from parent to this file/folder",
   IFSpecFull TEXT        NOT NULL,
   FSpecFull TEXT        NOT NULL COMMENT "full filespec (calculated)",
  ID_IFParent INT        DEFAULT NULL,
   WFullPath TEXT        NOT NULL COMMENT "full web URL (calculated)",
  OFSpecPart VARCHAR(255) NOT NULL,
   OFSpecFull TEXT        NOT NULL,
  ID_OFParent INT        DEFAULT NULL,
   WhenAdded  DATETIME    NOT NULL COMMENT "when the file was first added to the repository",
   WhenAdded  DATETIME    NOT NULL COMMENT "when the file was first added to the repository",
   WhenCreated DATETIME  NOT NULL COMMENT "file's creation timestamp",
   WhenCreated DATETIME  NOT NULL COMMENT "file's creation timestamp",

Revision as of 17:50, 25 July 2017

About

  • Meaning: can represent any filesystem entity
  • Purpose: for code-managed repositories
  • Notes:
    • directory size optimization - For now, we'll just set use a constant and set it to a best-guess limit, probably 1000.
    • maximum URL length is somewhere around 1024 characters (varies by browser and server; presumably there is an official limit that is ≤ this).
    • This is related to FileFerret/SQL/entry, but not the same; that system tracks user-managed files.
    • Wrinkle I'm still working out: this actually needs to track two different representations of the file -- one for how to retrieve it from the native filesystem, and the other by which it will be represented to the user. There are issues to consider.

Fields

  • IFSpec*: These are related to where the file is actually stored in the filesystem. They are not exposed to non-admin users unless direct access is desired (no security). It should be optimized for access time or whatever metrics are prioritized:
    • IFSpecName: this node's name as known to the filesystem
    • IFSpecFull: full filespec to this node (including name) from repository base spec
    • ID_IFParent
  • OFSpec*: These are related to the hierarchy that is exposed to the user:
    • OFSpecName: name by which the user knows the node (how it's displayed)
    • OFSpecFull: full path to this node (including name) from external URI base
    • ID_OFParent: parent node as seen by user

History

  • 2017-07-22 created for reworking file-management
  • 2017-07-24 moved from VbzCart to Ferreteria (RepoFerret module); renamed from fm_node to rf_node
  • 2017-07-25 decided to try having separate internal and external filespec; rearranged stuff

SQL

<mysql> CREATE TABLE `rf_node` (

 ID        INT          NOT NULL AUTO_INCREMENT,
 IFSpecPart VARCHAR(255) NOT NULL COMMENT "relative filespec - the part of the path from parent to this file/folder",
 IFSpecFull TEXT         NOT NULL,
 ID_IFParent INT        DEFAULT NULL,
 OFSpecPart VARCHAR(255) NOT NULL,
 OFSpecFull TEXT         NOT NULL,
 ID_OFParent INT        DEFAULT NULL,
 WhenAdded  DATETIME    NOT NULL COMMENT "when the file was first added to the repository",
 WhenCreated DATETIME   NOT NULL COMMENT "file's creation timestamp",
 WhenEdited  DATETIME   DEFAULT NULL COMMENT "file's last-modified timestamp",
 WhenDeleted DATETIME   DEFAULT NULL COMMENT "when the file was removed from the repository (NULL = still here)",
 Descr     VARCHAR(255) DEFAULT NULL COMMENT "brief name or description",
 PRIMARY KEY(`ID`)

) ENGINE = InnoDB;</mysql>